关于socket关闭

查日志遇到一情况:

Server(openfire)关闭了一个socket连接,但是客户端(AIR)8分钟后才收到close事件。

查各方文档发现Socket有个SO_TIMEOUT参数,貌似C与Java都可以设置这个值,

见:http://msdn.microsoft.com/en-us/library/aa283445(v=VS.60).aspx

但是查了很多资料都没有找到ActionScript里setSoTimeout设置的是多少。

顺便学习了一下socket关闭的流程:

http://blog.csdn.net/factor2000/article/details/3929197

当发起主动关闭的左边这方发送一个FIN过去后,右边被动关闭的这方要回应一个ACK,这个ACK是TCP回应的(同时TCP向上层应用程序提交一个ERROR,导致上面的SOCKET的send或者recv返回SOCKET_ERROR),而不是应用程序发送的,此时,被动关闭的一方就处于CLOSE_WAIT状态了。如果此时被动关闭的这一方不再继续调用closesocket,那么他就不会发送接下来的FIN,导致自己老是处于CLOSE_WAIT。只有被动关闭的这一方调用了closesocket,才会发送一个FIN给主动关闭的这一方,同时也使得自己的状态变迁为LAST_ACK,待接收到主动关闭方发送的ACK后,才会将SOCKET置为CLOSED。

这个没看明白:http://www.gnu.org/software/libc/manual/html_node/Closing-a-Socket.html#Closing-a-Socket

关于SO_TIMEOUT:

http://blog.csdn.net/woshisap/article/details/6597413

http://hc.apache.org/httpclient-legacy/apidocs/org/apache/commons/httpclient/params/HttpConnectionParams.html

备忘。

原文地址:https://www.cnblogs.com/ShepherdIsland/p/3012269.html