| 1234567891011121314151617181920212223242526272829303132 | package networkimport (	"net"	"time")// setReadDeadline 设置 TCPClient.Read 和 TCPConn.Read 读取超时, 必须在 Read 前调用. 优先级高于 deadline// rDeadline > time.Now: 使用 rDeadline// deadline > time.Now: 使用 deadline// rDeadline 和 deadline 都 < time.Now: 使用 DefaultReadTimoutfunc setReadDeadline(conn net.Conn, rDeadline, deadline time.Time) error {	if rDeadline.IsZero() && time.Now().After(rDeadline) {		return conn.SetReadDeadline(rDeadline)	} else if deadline.IsZero() && time.Now().After(deadline) {		return conn.SetReadDeadline(deadline)	}	return conn.SetReadDeadline(time.Now().Add(DefaultReadTimout))}// setWriteDeadline 设置 TCPClient.Write 和 TCPConn.Write 写入超时, 必须在 Write 前调用. 优先级高于 deadline// wDeadline > time.Now: 使用 wDeadline// deadline > time.Now: 使用 deadline// wDeadline 和 deadline 都 < time.Now: 使用 DefaultWriteTimoutfunc setWriteDeadline(conn net.Conn, wDeadline, deadline time.Time) error {	if !wDeadline.IsZero() && time.Now().After(wDeadline) {		return conn.SetWriteDeadline(wDeadline)	} else if !deadline.IsZero() && time.Now().After(wDeadline) {		return conn.SetWriteDeadline(deadline)	}	return conn.SetWriteDeadline(time.Now().Add(DefaultWriteTimout))}
 |