Документация для AcceptEx()
гласит:
Когда эта операция успешно завершена, sAcceptSocket может быть передан, но только для следующих функций:
- ReadFile
- WriteFile
- отправка
- WSASend
- recv
- WSARecv
- TransmitFile
- closesocket
- setsockopt (только для SO_UPDATE_ACCEPT_CONTEXT)
Обратите внимание, что shutdown()
отсутствует в списке.Действительно, вызов shutdown(sAcceptSocket, SD_SEND)
возвращает SOCKET_ERROR
, а WSAGetLastError()
приводит к ошибке WSAENOTCONN
:
Запрос на отправку или получение данных был отклонен, поскольку сокет не подключен и (при отправке насокет датаграммы с использованием sendto call) адрес не был указан.
Почему нельзя отключить сокет, подключенный через AcceptEx()
?Кроме того, почему сокет не отображается как подключенный, поскольку он уже получает данные (перекрывающаяся операция завершена и уведомление о завершении указывает, что было получено несколько size>0
байтов)?