diff options
author | Sina Ghaderi <32870524+Sina-Ghaderi@users.noreply.github.com> | 2021-03-19 08:06:20 +0330 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-19 08:06:20 +0330 |
commit | b8bb371ca118aa63785adffd98bb24cc1113f1c5 (patch) | |
tree | 00bab7b7194f92bee0e831958e34c099efbf80ff /vendor/mysql/conncheck.go | |
parent | e16ec4f65419aefa0bb401d6af2e30be0d6bfa25 (diff) |
pushing to git services
Diffstat (limited to 'vendor/mysql/conncheck.go')
-rw-r--r-- | vendor/mysql/conncheck.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/mysql/conncheck.go b/vendor/mysql/conncheck.go new file mode 100644 index 0000000..024eb28 --- /dev/null +++ b/vendor/mysql/conncheck.go @@ -0,0 +1,54 @@ +// Go MySQL Driver - A MySQL-Driver for Go's database/sql package +// +// Copyright 2019 The Go-MySQL-Driver Authors. All rights reserved. +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this file, +// You can obtain one at http://mozilla.org/MPL/2.0/. + +// +build linux darwin dragonfly freebsd netbsd openbsd solaris illumos + +package mysql + +import ( + "errors" + "io" + "net" + "syscall" +) + +var errUnexpectedRead = errors.New("unexpected read from socket") + +func connCheck(conn net.Conn) error { + var sysErr error + + sysConn, ok := conn.(syscall.Conn) + if !ok { + return nil + } + rawConn, err := sysConn.SyscallConn() + if err != nil { + return err + } + + err = rawConn.Read(func(fd uintptr) bool { + var buf [1]byte + n, err := syscall.Read(int(fd), buf[:]) + switch { + case n == 0 && err == nil: + sysErr = io.EOF + case n > 0: + sysErr = errUnexpectedRead + case err == syscall.EAGAIN || err == syscall.EWOULDBLOCK: + sysErr = nil + default: + sysErr = err + } + return true + }) + if err != nil { + return err + } + + return sysErr +} |