Что означает код ошибки Windows 10038 (WSAENOTSOCK)?

 
Предыдущий Следующий
WSAEALREADY WSAEDESTADDRREQ

WSAENOTSOCK

WSAENOTSOCK означает, что аргумент, переданный как сокет, сейчас не обозначает сокет Winsock. Обычно это дефект жизненного цикла приложения или обработки типов, а не удалённая сетевая проблема.

Как это обычно происходит

Сокет мог быть закрыт и затем повторно использован, через общую абстракцию дескрипторов мог быть передан несокетный дескриптор, либо параллельное завершение вступило в гонку с операцией ввода-вывода или готовности. Ошибка также может возникнуть после неправильной межпроцессной передачи: Windows поддерживает дублирование сокета через WSADuplicateSocket, но простое копирование числового значения дескриптора в другой процесс не эквивалентно этому.

Как исследовать

  • Регистрируйте создание, дублирование, передачу владения и закрытие вместе с числовым SOCKET .
  • Убедитесь, что один компонент владеет переходом в закрытое состояние и что незавершённый ввод-вывод видит это состояние до повторного использования объектов.
  • Проверьте, что сокетные API не вызываются для обычных файловых дескрипторов, событий или дескрипторов CRT.

Microsoft: ошибки accept · Microsoft: WSADuplicateSocket · The Open Group: дескрипторы сокетов


Нужно найти другой код? Найти другой код состояния или ошибки.