客户端调用connect
底层发送SYN包到服务端
如果此时服务端尚未listen,
则返回RST+ACK,connect返回失败;
如果此时服务端已经调用listen,
如果listen队列未满,
返回SYN+ACK,客户端应答ACK,握手完成,connect返回成功;
如果listen队列已满,
返回RST+ACK,connect返回失败;
服务端调用accept与否不影响握手
连接建立之后
调用shutdown(SD_SEND),底层发送FIN包到对方,对方应答ACK
调用shutdown(SD_RECEIVE),
如果此时没有数据等待recv,
则不做任何处理,可正常发送数据;
如果此时有数据在等待recv或者后续收到数据,
则发送RST+ACK,之后连接终端,双方都不能再发送/接收数据;
调用shutdown后,套接字相关资源未释放,直到closesocket