推送服务器之SO_LINGER参数

推送服务器发送信息后,当即关闭socket。服务器

测试发现有client并无收到信息。查找缘由,找到SO_LINGER参数:socket

当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭链接。事实上,SO_LINGER并不被推荐使用,大多数状况下咱们推荐使用默认的关闭方式(即下方表格中的第一种状况)。测试

下方代码段显示linger结构语法,表格为不一样参数状况下的套接字行为。
spa

 
  1. typedef struct linger { 
  2.   u_short l_onoff;    //开关,零或者非零 
  3.   u_short l_linger;   //优雅关闭最长时限 
  4. } linger; 
l_onoff l_linger closesocket行为 发送队列 底层行为
忽略 当即返回。 保持直至发送完成。 系统接管套接字并保证将数据发送至对端。
非零 当即返回。 当即放弃。 直接发送RST包,自身当即复位,不用通过2MSL状态。对端收到复位错误号。
非零 非零 阻塞直到l_linger时间超时或数据发送完成。(套接字必须设置为阻塞zhuan) 在超时时间段内保持尝试发送,若超时则当即放弃。 超时则同第二种状况,若发送完成则皆大欢喜。

可参考的资料:.net

http://msdn.microsoft.com/en-us/library/ms737582(v=VS.85).aspxcode

http://msdn.microsoft.com/en-us/library/ms739165(v=VS.85).aspxorm

http://blog.csdn.net/factor2000/archive/2009/02/23/3929816.aspxblog

相关文章
相关标签/搜索