Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Socket connessione caduta
Forum - C/C++ - Socket connessione caduta

Avatar
ShellC91 (Normal User)
Newbie


Messaggi: 15
Iscritto: 29/06/2010

Segnala al moderatore
Postato alle 20:42
Martedì, 06/07/2010
Ciao a tutti come posso fare usando i socket (Windows) per verificare quando una connessione cade?

Cosa ritornano la send() e la recv() quando una connessione cade? ritornano 0 o -1 ?

Quale tipo di controllo devo mettere?

Ringrazio in anticipo tutti.


DUAL-BOOT: Windows - Debian

http://counter.li.org
Linux user #515661.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:09
Martedì, 06/07/2010
send
http://msdn.microsoft.com/en-us/library/ms740149(VS.85).aspx

"Return Value - If no error occurs, send returns the total number of bytes sent, which can be less than the number requested to be sent in the len parameter. Otherwise, a value of SOCKET_ERROR is returned, and a specific error code can be retrieved by calling WSAGetLastError."


recv
http://msdn.microsoft.com/en-us/library/ms740121(v=VS.85). ...
"Return Value - If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data 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."


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
ShellC91 (Normal User)
Newbie


Messaggi: 15
Iscritto: 29/06/2010

Segnala al moderatore
Postato alle 21:12
Martedì, 06/07/2010
quindi da quello che ho capito sarebbe:

Codice sorgente - presumibilmente Plain Text

  1. if(send(...) == SOCKET_ERROR)
  2. {
  3.       ...
  4. }


e

Codice sorgente - presumibilmente Plain Text

  1. if(recv(...) == 0)
  2. {
  3.       ...
  4. }



E' giusto?


DUAL-BOOT: Windows - Debian

http://counter.li.org
Linux user #515661.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5460
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:14
Martedì, 06/07/2010
Devi sempre controllare (con send e recv) il SOCKET_ERROR e, in questo caso, controllare l'errore specifico con la API WSAGetLastError.

Per la recv, se hai uno zero (come scritto) la connessione è stata chiusa "correttamente".

Ultima modifica effettuata da nessuno il 06/07/2010 alle 21:17


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote