go-tcp
client
建立连接时的情况
- 网络不可达或对方服务未启动:立即返回
- 服务的listen backlog满:会阻塞,等待时间与server端的网络实现和设置有关。
- 网络延迟较大,Dial阻塞并超时
conn.Read的行为特点
- Socket中无数据
接收方(Server)会阻塞在Read操作上。执行该Read操作的goroutine也会被挂起。runtime会监视该socket,直到其有数据才会重新调度该socket对应的Goroutine完成read。 - Socket中有部分数据
如果socket中有部分数据,且长度小于一次Read操作所期望读出的数据长度,那么Read将会成功读出这部分数据并返回,而不是等待所有期望数据全部读取后再返回。 - Socket中有足够数据
如果socket中有数据,且长度大于等于一次Read操作所期望读出的数据长度,那么Read将会成功读出这部分数据并返回。再次Read时会把剩余数据读出
server
Socket关闭
有数据关闭
是指在client关闭时,socket中还有server端未读取的数据