| Предыдущий | Следующий |
| WSAEALREADY | WSAEDESTADDRREQ |
WSAENOTSOCK
WSAENOTSOCK означает, что аргумент, переданный как сокет, сейчас не обозначает сокет Winsock. Обычно это дефект жизненного цикла приложения или обработки типов, а не удалённая сетевая проблема.
Как это обычно происходит
Сокет мог быть закрыт и затем повторно использован, через общую абстракцию дескрипторов мог быть передан несокетный дескриптор, либо параллельное завершение вступило в гонку с операцией ввода-вывода или готовности. Ошибка также может возникнуть после неправильной межпроцессной передачи: Windows поддерживает дублирование сокета через WSADuplicateSocket, но простое копирование числового значения дескриптора в другой процесс не эквивалентно этому.
Как исследовать
- Регистрируйте создание, дублирование, передачу владения и закрытие вместе с числовым
SOCKET. - Убедитесь, что один компонент владеет переходом в закрытое состояние и что незавершённый ввод-вывод видит это состояние до повторного использования объектов.
- Проверьте, что сокетные API не вызываются для обычных файловых дескрипторов, событий или дескрипторов CRT.
Microsoft: ошибки accept · Microsoft: WSADuplicateSocket · The Open Group: дескрипторы сокетов
Нужно найти другой код? Найти другой код состояния или ошибки.