我的应用程序关闭时应该关闭套接字吗?

时间:2015-06-15 16:34:00

标签: c sockets winapi winsock

我的服务器应用程序中有100多个套接字,当我的应用程序即将关闭时,我应该在这些100多个套接字上调用closesocket()吗?

在每个套接字关闭连接之前,closesocket()是否可以不返回,从而延迟我的应用程序关闭所需的时间?

2 个答案:

答案 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