我的服务器应用程序中有100多个套接字,当我的应用程序即将关闭时,我应该在这些100多个套接字上调用closesocket()
吗?
在每个套接字关闭连接之前,closesocket()
是否可以不返回,从而延迟我的应用程序关闭所需的时间?
答案 0 :(得分:2)
让操作系统关闭套接字(或空闲内存等)是一项安全功能,不应单独依赖。拥有一个干净的出口总是一个好主意,你的代码会自行清理。
在C中,您将使用close()。有关延迟的问题,请参阅socket手册页:http://linux.die.net/man/7/socket
SO_LINGER
设置或获取SO_LINGER选项。争论是挥之不去的 结构体。
struct linger {
int l_onoff; /* linger active */
int l_linger; /* how many seconds to linger for */ };
启用后,关闭(2)或关闭(2)将不会返回,直到所有排队 套接字的消息已成功发送或延迟 超时已达到。否则,呼叫立即返回 结束是在后台完成的。当插座关闭时 退出(2)的一部分,它总是在后台徘徊。
答案 1 :(得分:0)
是的,closesocket可能不会立即返回并延迟关闭程序。有关详细信息,请参阅SO_LINGER和SO_DONTLINGER以及setsockopt函数。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx