使用IOCP进行优美的套接字关闭

我写了一个C ++应用程序,它可以根据命令行参数同时充当服务器和客户端。因此,客户端将启动连接,服务器将接受连接,并且将进行数据传输,并且我将始终有一个带有2KB缓冲区的未决WSARecv调用。直到这里都可以。

但是,假设我在客户端上调用了shutdown和closesocket,然后GetQueuedCompletionStatus在客户端出现错误ERROR_CONNECTION_ABORTED(0x40),在服务器端失败,出现错误ERROR_NETNAME_DELETED(0x64)。

这是关闭套接字的代码

   shutdown(sock,SD_RECEIVE);
   closesocket(sock);

但是可以说,我从Postman应用程序向服务器发送请求,我注意到Postman收到来自服务器的响应时会关闭套接字,并且GetQueuedCompletionStatus不会失败,并且我会得到IO完成数据包,lpNumberOfBytesTransferred为零

这种行为改变的原因是什么?我可以优雅地关闭插座吗?

在wireshark中,我也注意到当客户端关闭套接字时,我看到了一个RST数据包,而Postman发送了一个FIN数据包。我在做什么错了?

iCMS 回答:使用IOCP进行优美的套接字关闭

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2148912.html

大家都在问