按照msdn文档,windows的linger与posix标准是一致的,默认是关闭(off)的调用close系统会在后台将没有发送出去的数据发送完。
但是实际调测时,发现一旦调用closesocket连接就会被reset了,这和linger开启(on)并且等待时间设置为0的效果一样了。
分析有可能是安装了一些杀毒软件,勾住了网络API,而这些钩子没有严格按照标准实现。
临时解决办法是close前等待对方关闭,确定所有数据对方都收到,再关闭,这相当于实现了系统的默认功能。
本文探讨了在Windows环境下使用linger特性时遇到的实际问题。通过对比MSDN文档和实际调测结果,发现某些情况下closesocket连接会被reset,而非按照linger开启的预期行为。进一步分析可能是因为第三方杀毒软件的网络API钩子导致的标准实现不一致。提出了一种临时解决方案,即在close操作前等待对方关闭连接,确保所有数据传输完毕,以此实现系统默认的关闭行为。
按照msdn文档,windows的linger与posix标准是一致的,默认是关闭(off)的调用close系统会在后台将没有发送出去的数据发送完。
但是实际调测时,发现一旦调用closesocket连接就会被reset了,这和linger开启(on)并且等待时间设置为0的效果一样了。
分析有可能是安装了一些杀毒软件,勾住了网络API,而这些钩子没有严格按照标准实现。
临时解决办法是close前等待对方关闭,确定所有数据对方都收到,再关闭,这相当于实现了系统的默认功能。