Эй, я использую WSAEventSelect для уведомлений о событиях сокетов. Пока все круто и работает как шарм, но есть одна проблема.
Клиент - это приложение .NET, а сервер написан на Winsock C ++. В приложении .NET я использую класс System.Net.Sockets.Socket для TCP / IP. Когда я вызываю методы Socket.Shutdown () и Socket.Close (), я получаю событие FD_CLOSE на сервере, которое, я уверен, в порядке. Хорошо, проблема возникает, когда я проверяю iErrorCode WSANETWORKEVENTS, который я передал WSAEnumNetworkEvents. Я проверяю это так
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