go-tcp

client

建立连接时的情况

  1. 网络不可达或对方服务未启动:立即返回
  2. 服务的listen backlog满:会阻塞,等待时间与server端的网络实现和设置有关。
  3. 网络延迟较大,Dial阻塞并超时

conn.Read的行为特点

  1. Socket中无数据
    接收方(Server)会阻塞在Read操作上。执行该Read操作的goroutine也会被挂起。runtime会监视该socket,直到其有数据才会重新调度该socket对应的Goroutine完成read。
  2. Socket中有部分数据
    如果socket中有部分数据,且长度小于一次Read操作所期望读出的数据长度,那么Read将会成功读出这部分数据并返回,而不是等待所有期望数据全部读取后再返回。
  3. Socket中有足够数据
    如果socket中有数据,且长度大于等于一次Read操作所期望读出的数据长度,那么Read将会成功读出这部分数据并返回。再次Read时会把剩余数据读出

server

Socket关闭

有数据关闭

是指在client关闭时,socket中还有server端未读取的数据

无数据关闭