完成端口怎么优雅地关闭socket
完成端口如何优雅地关闭socket
小弟写了一个完成端口的socks5代理服务器做转发。用了以下代码来关闭socket的时候发现根本不能正常地关闭。直接就rst,ack了。大家可以看下图
图上所示红色部分就是执行下面代码的结果,根本不是正常关闭socket。
我就是用的此代码测试的。完全不起作用。直接就是发送rst关闭 并没有发送fin,ack来正常关闭。
还请各位前辈指点一下。小弟不盛感激!
------解决思路----------------------
把 shutdown 换成 CancelIo((HANDLE)m_socket) 试试
------解决思路----------------------
把shutdown去掉试试
------解决思路----------------------
解决方案就是由收到最后一个包的那端closesocket()!!!!

------解决思路----------------------
As long as the read buffer TCP stack there unread (read) data, then calling close will report directly to the end to send the RST
小弟写了一个完成端口的socks5代理服务器做转发。用了以下代码来关闭socket的时候发现根本不能正常地关闭。直接就rst,ack了。大家可以看下图
图上所示红色部分就是执行下面代码的结果,根本不是正常关闭socket。
linger lg = {1, 10}; // 表示延迟打开,延迟10秒
setsockopt(m_socket, SOL_SOCKET, SO_LINGER, (char *)&lg, sizeof(linger));
shutdown(m_socket, SD_BOTH); // 也可以设置第二个参数为SD_SEND或SD_RECEIVE
closesocket(m_socket);
我就是用的此代码测试的。完全不起作用。直接就是发送rst关闭 并没有发送fin,ack来正常关闭。
还请各位前辈指点一下。小弟不盛感激!
------解决思路----------------------
把 shutdown 换成 CancelIo((HANDLE)m_socket) 试试
------解决思路----------------------
把shutdown去掉试试
------解决思路----------------------
解决方案就是由收到最后一个包的那端closesocket()!!!!
------解决思路----------------------
As long as the read buffer TCP stack there unread (read) data, then calling close will report directly to the end to send the RST