GO - 包接口说明

  1. [net]
  2. Conn
  3. Listener
  4. 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是未关闭