Всем привет.
Есть сервер на IOCP. Я телнетом 10 раз получил данные, и потом закрываю телнетом соединение. В итоге потом сервер 9 раз получает данные с размером 0.
Т.е. ничего не получает. Сокет закрыт.
Никто на знает что это такое? Никто не сталкивался?
Re: Приходят данные после того как соединение закрыто (IOCP)
_>Есть сервер на IOCP. Я телнетом 10 раз получил данные, и потом закрываю телнетом соединение. В итоге потом сервер 9 раз получает данные с размером 0.
Что такое "получает данные"? Можно кусок кода?
Re: Приходят данные после того как соединение закрыто (IOCP)
_>Всем привет. _>Есть сервер на IOCP. Я телнетом 10 раз получил данные, и потом закрываю телнетом соединение. В итоге потом сервер 9 раз получает данные с размером 0. _>Т.е. ничего не получает. Сокет закрыт.
Приведите кусочек кода, где вы работаете с IOCP, по-моему вы что то не то делаете.
If no error occurs and the receive operation has completed immediately, WSARecv returns zero. In this case, the completion routine will have already been scheduled to be called once the calling thread is in the alertable state. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.
Как бы возвращение ноля — это успех, а не ошибка. А по Вашему коду — это ошибка.
Re[6]: Приходят данные после того как соединение закрыто (IOCP)
Здравствуйте, _facelift, Вы писали:
_>У нас 0, и ошибка 997 (PENDING) — это значит все ОК. Я проверяю ошибки, но не в этом месте. _>Типа 0 — не послали, а поставили в очередь.
Тогда у Вас вопрос, почему lpNumberOfBytesRecvd равны нулю?
Опять же из доков:
For connection-oriented sockets, WSARecv can indicate the graceful termination of the virtual circuit in one of two ways that depend on whether the socket is byte stream or message oriented. For byte streams, zero bytes having been read (as indicated by a zero return value to indicate success, and lpNumberOfBytesRecvd value of zero) indicates graceful closure and that no more bytes will ever be read.