GO - 包接口说明
[net]
:Conn
:Listener
:TCPConn
服务端
[监听端口 - Listener]
listener,err := net.Listen("tcp", addr)
[处理端口连接 - Conn]
conn,err := listener.Accept()
SOCKET连接建立
[阻塞Dial - Conn]
// 建立TCP连接
conn, err := net.Dial("tcp", "www.baidu.com:80")
if err != nil {
// handle error
return;
}
defer conn.Close()
//read or write on conn
[超时机制Dial - Conn]
conn, _ := net.DialTimeout("tcp", "www.baidu.com:80", 2*time.Second)
// 异常
:网络不可达或对方服务未启动
:服务的listen backlog满
:网络延迟较大,Dial阻塞并超时
SOCKET 读写
[异常 - conn.Read]
:Socket中无数据
:Socket中有部分数据
:Socket中有足够数据
:Socket关闭 => "有数据关闭"和"无数据关闭"
:读取操作超时
[异常 - conn.Write]
:成功写
:写阻塞
:写入部分数据
[Socket属性]
:SetKeepAlive
:SetKeepAlivePeriod
:SetLinger
:SetNoDelay (默认no delay)
:SetWriteBuffer
:SetReadBuffer
连接关闭
[socket - 全双工]
:对方关闭连接时,己方读取会错误,写操作不会,因为会写到内核socket缓冲区。及,己方的socket是未关闭