嘿,我正在使用 WSAEventSelect 进行套接字的事件通知。到目前为止,一切都很酷,而且工作起来很迷人,但是有一个问题。
客户端是一个 .NET 应用程序,而服务器是用 Winsock C++ 编写的。在 .NET 应用程序中,我将 System.Net.Sockets.Socket 类用于 TCP/IP。当我调用 Socket.Shutdown() 和 Socket.Close() 方法时,我在服务器中收到 FD_CLOSE 事件,我很确定这很好。好的,当我检查传递给 WSAEnumNetworkEvents 的 WSANETWORKEVENTS 的 iErrorCode 时,就会出现问题。我这样检查
if (listenerNetworkEvents.lNetworkEvents & FD_CLOSE)
{
if (listenerNetworkEvents.iErrorCode[FD_CLOSE_BIT] != 0)
{
// it comes here
// which means there is an error
// and the ERROR I got is
// WSAECONNABORTED
printf("FD_CLOSE failed with error %d\n",
listenerNetworkEvents.iErrorCode[FD_CLOSE_BIT]);
break;
}
closesocket(socketArray[Index]);
}
但它失败并出现WSAECONNABORTED错误。为什么呢?
编辑:顺便说一句,我在同一台计算机上同时运行客户端和服务器,是因为这个吗?当我这样做时,我收到了 FD_CLOSE 事件:
server.Shutdown(SocketShutdown.Both); // in .NET C#, client code