recv выдает ошибку WSAEWOULDBLOCK 10035
От: Mattias  
Дата: 22.04.09 12:53
Оценка:
iResult = recv(client, recvbuf, recvbuflen, 0); выдает ошибку

Resource temporarily unavailable.

This error is returned from operations on nonblocking sockets that cannot be completed immediately, for example recv when no data is queued to be read from the socket. It is a nonfatal error, and the operation should be retried later. It is normal for WSAEWOULDBLOCK to be reported as the result from calling connect on a nonblocking SOCK_STREAM socket, since some time must elapse for the connection to be established.


Как лучше всего решить эту проблему? Я подумал вешать события(FD_READ), но , возможно есть более правильные способы?
Re: recv выдает ошибку WSAEWOULDBLOCK 10035
От: Sergey Astakhov Россия  
Дата: 22.04.09 18:39
Оценка:
Здравствуйте, Mattias, Вы писали:

M>iResult = recv(client, recvbuf, recvbuflen, 0); выдает ошибку

M>Resource temporarily unavailable.

[Skip was here]

M>Как лучше всего решить эту проблему?


Ты забыл указать в чём эта проблема собсно заключается.
Судя по описанию это штатный код возврата для неблокирующих сокетов, всё в порядке.
Re[2]: recv выдает ошибку WSAEWOULDBLOCK 10035
От: Mattias  
Дата: 23.04.09 07:48
Оценка:
Здравствуйте, Sergey Astakhov, Вы писали:

SA>Здравствуйте, Mattias, Вы писали:


M>>iResult = recv(client, recvbuf, recvbuflen, 0); выдает ошибку

M>>Resource temporarily unavailable.

SA>[Skip was here]


M>>Как лучше всего решить эту проблему?


SA>Ты забыл указать в чём эта проблема собсно заключается.

SA>Судя по описанию это штатный код возврата для неблокирующих сокетов, всё в порядке.


Как мне при этом получиить данные?
Re[3]: recv выдает ошибку WSAEWOULDBLOCK 10035
От: Mattias  
Дата: 23.04.09 09:11
Оценка:
Здравствуйте, Mattias, Вы писали:

M>Здравствуйте, Sergey Astakhov, Вы писали:


SA>>Здравствуйте, Mattias, Вы писали:


M>>>iResult = recv(client, recvbuf, recvbuflen, 0); выдает ошибку

M>>>Resource temporarily unavailable.

SA>>[Skip was here]


M>>>Как лучше всего решить эту проблему?


SA>>Ты забыл указать в чём эта проблема собсно заключается.

SA>>Судя по описанию это штатный код возврата для неблокирующих сокетов, всё в порядке.


Думаю, дело в том, что
client= WSAAccept(server, (struct sockaddr*)&from, &fromlen, NULL, NULL);
WSAAccept (которая работает асинхронно) не успевает отработать и блокирует сокет.

Как мне при этом получиить данные?
Re[4]: recv выдает ошибку WSAEWOULDBLOCK 10035
От: Sergey Astakhov Россия  
Дата: 23.04.09 13:44
Оценка:
Здравствуйте, Mattias, Вы писали:

SA>>>Ты забыл указать в чём эта проблема собсно заключается.

SA>>>Судя по описанию это штатный код возврата для неблокирующих сокетов, всё в порядке.

M>Думаю, дело в том, что

M>client= WSAAccept(server, (struct sockaddr*)&from, &fromlen, NULL, NULL);
M>WSAAccept (которая работает асинхронно) не успевает отработать и блокирует сокет.

M>Как мне при этом получиить данные?


Так ты всё-таки хочешь неблокирующие или блокирующие сокеты? В блокирующих recv не вернётся, пока не дождётся прихода данных, в неблокирующих — при отсутствии данных вываливается с кодом ошибки "данных нет, приходите позже". Если тебе нечего делать в ожидании данных — используй по старинке блокирующие сокеты и не заморачивайся.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.