2013-10-16 34 views
0

Winsock32/C++/Win32环境)关闭客户端套接字,之后服务器已经关闭了它的身边

据我了解,而不是关闭文件句柄实例(使用CloseHandle()), 关闭套接字一个2部分的操作,除了释放SOCK句柄,并释放实际资源外,它还负责在会话终止时通知对方连接。

问题是,如何处理服务器由于其自身原因而关闭连接的场景,然后客户端试图将其关闭。也就是说,如上所述,如何仅做资源释放部分,而没有终止通知。

+0

这是一个网络 - 总是有可能服务器和客户端都以重叠的方式关闭连接。在任何一端,关闭句柄,只处理关闭期间可能出现的任何错误/异常。 –

+0

@MartinJames你当然是对的,但根据MSDN,用'closesocket()'完成一个'SOCK'句柄,并且在所描述的情况下,它只是***阻止*** –

+0

我们可能有一个[XY问题](http://mywiki.wooledge.org/XyProblem)在这里。 – zakinster

回答

0

如何处理服务器关闭了它的 自己的理由连接的情况?

如果您已经被无效被关闭的连接插座上叫closesocket(),你只是释放套接字描述,您不必担心套接字是否关闭另一侧与否。

+0

我不知道。问题是'closesocket()'* blocks *在这种情况下。 –

+0

@JimLanflte closesocket()不会被阻塞,除非套接字的选项l_onoff和l_linger都是非空值,在这种情况下,它会等待指定的时间以允许发送排队的数据。如果你的程序无限期挂起,那么你的代码中可能会有另一个问题。 – zakinster

+0

我会建议在调用closesocket之前添加'shutdown(sock,SD_BOTH)',但如果另一端已经关闭了它们的结束,我不确定是否会有很大的区别。 – icabod

相关问题