图上所示红色部分就是执行下面代码的结果,根本不是正常关闭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来正常关闭。
还请各位前辈指点一下。小弟不盛感激!
7 个解决方案
#1
把 shutdown 换成 CancelIo((HANDLE)m_socket) 试试
#2
把shutdown去掉试试
#3
解决方案就是由收到最后一个包的那端closesocket()!!!!
#4
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
#5
如图一模一样!
#6
去掉也试了 还是跟上面图片上的一模一样
#7
问题是现在的情况是我TCP服务器主动断开,您说的那样到底是怎么弄的。
#1
把 shutdown 换成 CancelIo((HANDLE)m_socket) 试试
#2
把shutdown去掉试试
#3
解决方案就是由收到最后一个包的那端closesocket()!!!!
#4
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
#5
如图一模一样!
#6
去掉也试了 还是跟上面图片上的一模一样
#7
问题是现在的情况是我TCP服务器主动断开,您说的那样到底是怎么弄的。