[WinSock] send() zwraca SOCKET_ERROR, WSAGetLastError() zwraca 0
Ostatnio zmodyfikowano 2011-10-18 15:20
xevuel Temat założony przez niniejszego użytkownika |
[WinSock] send() zwraca SOCKET_ERROR, WSAGetLastError() zwraca 0 » 2011-10-13 08:27:06 Wczoraj próbowałem powrócić do starego projektu. Mam w nim funkcję send(). Zauważyłem, że send() zwraca SOCKET_ERROR, a WSAGetLastError() zwraca 0. Dlaczego? Kod: while( nSendSize > 0 ) { ret = send( sClient, & buffor[ iCurrPos ], nSendSize, 0 ); if( ret == 0 ) break; else if( ret == SOCKET_ERROR ) { MessageBox( 0, "Błąd wysyłania", "Błąd", 0 ); int what = WSAGetLastError(); IntInfo( what ); break; } nSendSize -= ret; iCurrPos += ret; }
|
|
DejaVu |
» 2011-10-13 08:36:16 Może sClient jest nieprawidłowy? |
|
xevuel Temat założony przez niniejszego użytkownika |
» 2011-10-14 10:30:12 sClient jest zadeklarowany globalnie, a uzyskuję go w ten sposób:
sClient = accept( sServerListen,( struct sockaddr * ) & clientaddr, & iSize ); if( sClient == INVALID_SOCKET ) { MessageBox( 0, "Błąd funkcji accept", "Błąd", 0 ); break; }
Przy próbie wysłania danych do klienta, serwer wyświetla błąd wysyłania, a po zakończeniu pracy klienta (przed zakończeniem pracy serwera) serwer wyświetla błąd odbioru... |
|
DejaVu |
» 2011-10-14 10:31:52 Może klient nie czeka na wiadomość tylko kończy swoją pracę i rozłącza się z serwerem zanim ten cokolwiek mu wyśle? |
|
xevuel Temat założony przez niniejszego użytkownika |
» 2011-10-14 10:40:46 Po zakończonym odbiorze klient powinien o tym poinformować. A informuje tylko w przypadku, gdy zakończę pracę serwera... |
|
malan |
» 2011-10-15 14:01:02 & buffor[ iCurrPos ] - co to jest? |
|
xevuel Temat założony przez niniejszego użytkownika |
» 2011-10-15 14:03:53 to? Wskaźnik do bufora, który przechowuje dane. |
|
malan |
» 2011-10-15 14:06:26 Jeszcze pewnie typu char? |
|
« 1 » 2 |