作者回复: 赞赞赞。
作者回复: 这是控制报文,是脱离应用程序掌握之外的控制协议部分,层这个层面来说,他们不被认为是"应用层数据"。
作者回复: 嗯,你试一下改改是不是可以的,我应该是写错了。
作者回复: 我理解还是内核会回收的,只不过是等待双向连接都关闭掉才会回收。
作者回复: 读到FIN包在read看来就是返回0.
作者回复: 不会立即释放,最终还是会被系统内核回收的。
作者回复: 你想彻底关闭双向连接的时候用close,你想只关闭自己这端到对端的连接时用shutdown。
作者回复: 1.那是之前发送的;
2.那是shutdown的结果,shutdown之后,就是往队列里扔了一个FIN报文,这个发送队列还是要被发送完成的。
作者回复: 分别调用shutdown两个方向,可以释放掉两个方向的套接字资源。
作者回复: 哪个程序?是close的还是shutdown的?如果把read返回0注释掉,说明是对端已经发起结束,这个时候是服务端是需要正常退出的,不明白注释的想法是?
作者回复: 因为有双向连接的问题,所以一般不会合并。
作者回复: 有点误解哦,FIN是会发的,只是一个方向的连接会被关闭,另一个方向正常的。
作者回复: 第一个问题,是的,这个是因为close调用之后sleep了;
第二个问题,应该在10秒之内就可以了,这个例子是为了展示close和shutdown的区别。
作者回复: 建议使用虚拟机安装一个ubutnu的Linux,在Linux下实验。
作者回复: 一个直观的解释就是太多ftp连接了,我google了一下,似乎还有被动连接和主动连接模式的问题,建议你看一下。
作者回复: 我认为还是会回到CLOSED状态,在LAST ACK状态下的等待ACK等不到,应该有容错处理逻辑。
作者回复: 嗯
作者回复: 直接从菜单中选择“Run-Run",然后找到想跑的应用程序名,就可以了。