Discussion:
вызов ioctlsocket(hSocket, FIONREAD, &ulParam ) - данных нет
(слишком старое сообщение для ответа)
Igor Garnov
2003-12-18 16:53:28 UTC
Permalink
Hi All,

Столкнулся с проблемой, к решению которой не знаю, как подступиться.

Под виндами.
Вызываю ioctlsocket(hSocket, FIONREAD, &ulParam );
Ошибки не возвращает. Но в ulParam всегда возвращает ноль, хотя я уже послал
килобайт 10 в этот сокет. Сокет типа SOCK_STREAM (TCP), работает в блокирующем
режиме (иначе зачем мне этот вызов...).
Ситуацию немного осложняет то, что сокет перед вызовом connect переключается в
неблокирующий режим вызовом WSAEventSelect. Потом, когда он соединяется, я
вызываю WSAEventSelect с нулем и
ulParam = 0;
ioctlsocket( hSocket, FIONBIO, &ulParam );
чтобы перевести сокет обратно в блокирующий режим.
Подчеркну, что все функции проверяются на ошибки - все ОК.

Почему же вызов ioctlsocket(hSocket, FIONREAD, &ulParam ); показывает, что
данные не поступают?

Заранее благодарен,
Игорь.
Igor Garnov
2003-12-23 12:51:27 UTC
Permalink
Thu Dec 18 2003 19:53, Igor Garnov wrote to All:

IG> Под виндами.
IG> Вызываю ioctlsocket(hSocket, FIONREAD, &ulParam );
IG> Ошибки не возвращает. Hо в ulParam всегда возвращает ноль, хотя я уже
IG> послал килобайт 10 в этот сокет. Сокет типа SOCK_STREAM (TCP), работает в
IG> блокирующем режиме (иначе зачем мне этот вызов...).
IG> Ситуацию немного осложняет то, что сокет перед вызовом connect
IG> переключается в неблокирующий режим вызовом WSAEventSelect. Потом, когда
IG> он соединяется, я вызываю WSAEventSelect с нулем и
IG> ulParam = 0;
IG> ioctlsocket( hSocket, FIONBIO, &ulParam );
IG> чтобы перевести сокет обратно в блокирующий режим.
IG> Подчеркну, что все функции проверяются на ошибки - все ОК.

IG> Почему же вызов ioctlsocket(hSocket, FIONREAD, &ulParam ); показывает,
IG> что данные не поступают?

Отвечаю сам себе :)
Может быть, кому-нибудь пригодится...
Вышеописанное поведение было связано с тем, что я устанавливал для этого
сокета буфер приема, равный нулю. Так я расчитывал избежать лишнего
копирования данных.

Loading...