recv возвращает -1 почему?
От: Ruweb  
Дата: 11.04.07 21:44
Оценка:
Здраствуйте.
У меня бывает, что recv возвращает -1 , почему? а вот чтоб recv иернула WSAEWOULDBLOCK ниразу не встречал, хотя я данные без пауз в цикле читаю, может -1 и означает что данные еще не пришли?
Разъясните пожалуйста, что к чему.. буду очень Вам признателен)
Re: recv возвращает -1 почему?
От: termitov  
Дата: 11.04.07 22:18
Оценка:
Здравствуйте, Ruweb, Вы писали:

R>Здраствуйте.

R>У меня бывает, что recv возвращает -1 , почему? а вот чтоб recv иернула WSAEWOULDBLOCK ниразу не встречал, хотя я данные без пауз в цикле читаю, может -1 и означает что данные еще не пришли?
R>Разъясните пожалуйста, что к чему.. буду очень Вам признателен)

Да вероятно так оно и есть. Вообще юзай WSARecv чем тебя не устраивает?
На самом деле я не встречал в recv того о чем ты говориш.
Re: recv возвращает -1 почему?
От: GeF  
Дата: 12.04.07 01:12
Оценка: +3
Здравствуйте, Ruweb, Вы писали:

R>Разъясните пожалуйста, что к чему.. буду очень Вам признателен)


SOCKET_ERROR = -1

If no error occurs, recv returns the number of bytes received. If the connection has been gracefully closed, the return value is zero. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError.

http://msdn2.microsoft.com/en-us/library/ms740121.aspx
... << RSDN@Home 1.2.0 alpha rev. 655>>
Re[2]: recv возвращает -1 почему?
От: Ruweb  
Дата: 12.04.07 16:02
Оценка:
Здравствуйте, termitov, Вы писали:

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


R>>Здраствуйте.

R>>У меня бывает, что recv возвращает -1 , почему? а вот чтоб recv иернула WSAEWOULDBLOCK ниразу не встречал, хотя я данные без пауз в цикле читаю, может -1 и означает что данные еще не пришли?
R>>Разъясните пожалуйста, что к чему.. буду очень Вам признателен)

T>Да вероятно так оно и есть. Вообще юзай WSARecv чем тебя не устраивает?

T>На самом деле я не встречал в recv того о чем ты говориш.

я пишу cgi приложение, а WSARecv по моему используется в win aplication
while( sk_recv = recv(sk[0], buff+help, 60000-help, 0) ) 
{
    if( sk_recv == -1 || sk_recv == WSAEWOULDBLOCK ) {
        Sleep(5);
        continue;
    }
    help += sk_recv;
}

так нармально делать?
если соединие оборвалось, то recv вернёт 0?
Re[3]: recv возвращает -1 почему?
От: termitov  
Дата: 12.04.07 17:20
Оценка:
Здравствуйте, Ruweb, Вы писали:

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


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


R>>>Здраствуйте.

R>>>У меня бывает, что recv возвращает -1 , почему? а вот чтоб recv иернула WSAEWOULDBLOCK ниразу не встречал, хотя я данные без пауз в цикле читаю, может -1 и означает что данные еще не пришли?
R>>>Разъясните пожалуйста, что к чему.. буду очень Вам признателен)

T>>Да вероятно так оно и есть. Вообще юзай WSARecv чем тебя не устраивает?

T>>На самом деле я не встречал в recv того о чем ты говориш.

R>я пишу cgi приложение, а WSARecv по моему используется в win aplication

R>
R>while( sk_recv = recv(sk[0], buff+help, 60000-help, 0) ) 
R>{
R>    if( sk_recv == -1 || sk_recv == WSAEWOULDBLOCK ) {
R>        Sleep(5);
R>        continue;
R>    }
R>    help += sk_recv;
R>}
R>

R>так нармально делать?
R>если соединие оборвалось, то recv вернёт 0?




оу cgi, ясна. Да совершенно верна в вин32 юзается WSARecv
cgi я не шарю, сожалею...
Re[4]: recv возвращает -1 почему?
От: Ruweb  
Дата: 13.04.07 12:47
Оценка:
T>оу cgi, ясна. Да совершенно верна в вин32 юзается WSARecv
T>cgi я не шарю, сожалею...

но всё равно, спасибо!
Re[3]: recv возвращает -1 почему?
От: cap Flint Россия  
Дата: 18.04.07 11:26
Оценка:
Здравствуйте, Ruweb, Вы писали:


R>я пишу cgi приложение, а WSARecv по моему используется в win aplication

R>
R>while( sk_recv = recv(sk[0], buff+help, 60000-help, 0) ) 
R>{
R>    if( sk_recv == -1 || sk_recv == WSAEWOULDBLOCK ) {
R>        Sleep(5);
R>        continue;
R>    }
R>    help += sk_recv;
R>}
R>

R>так нармально делать?
R>если соединие оборвалось, то recv вернёт 0?

нет, так не нормально

int res = recv(...);
if(res == 0)
// сокет закрыли
else if(res == SOCKET_ERROR)
{
  int err = WSAGetLastError();
  // и вот тут уже проверяем на WSAEWOULDBLOCK и т.п.
  // хотя получинение WSAEWOULDBLOCK  зависит от типа сокета
}
else 
// ура, мы получили что то из сокета
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.