go-connections icon indicating copy to clipboard operation
go-connections copied to clipboard

use if net.OpError.Err == syscall.EIPE, but net.OpError.Err never eq to syscall.EPIPE

Open xiaotushaoxia opened this issue 1 year ago • 0 comments

	broker := func(to, from *net.TCPConn) {
		written, err := io.Copy(to, from)
		if err != nil {
			// If the socket we are writing to is shutdown with
			// SHUT_WR, forward it to the other end of the pipe:
			if err, ok := err.(*net.OpError); ok && err.Err == syscall.EPIPE {
				_ = from.CloseRead()
			}
		}
		_ = to.CloseWrite()
		event <- written
	}

net.OpError.Err is *os.SyscallError, os.SyscallError.Err can not be syscall.Errno

maybe this is expected behavior

	broker := func(to, from *net.TCPConn) {
		written, err := io.Copy(to, from)
		if err != nil {
			// If the socket we are writing to is shutdown with
			// SHUT_WR, forward it to the other end of the pipe:
			var errno syscall.Errno
			if errors.As(err, &errno) && errno == syscall.EPIPE {
				_ = from.CloseRead()
			}
		}
		_ = to.CloseWrite()
		event <- written
	}

xiaotushaoxia avatar Dec 20 '23 19:12 xiaotushaoxia