2016-05-28 24 views
0

Ich habe ein kleines Problem mit der Antwort vom Client warten. Der Code sieht wie folgt aus:C Sockets schließen Verbindung, wenn keine Antwort

num_bytes_received = recv(recvFD, line, MAX_LINE_SIZE-1, 0); 

    if(line[0] == 'R') 
    { 
     do_something(); 
    } 

    if(line[0] == 'P') 
    { 
     do_another_thing(); 
    } 

Gibt es eine einfache Möglichkeit, eine Nachricht zu warten, der 30 Sekunden sagen wir mal, und wenn es keine Mitteilung ist ausführen do_another_thing(); Funktion? Es ist nicht Verbindungsprobleme Situation (wie Clients trennen usw.). Es ist meine eigene Beschränkung, die ich gerne schaffen würde.

+2

Sie können 'select' mit einem Timeout verwenden, um auf Aktivität auf dem Socket zu warten. Oder 'setsockopt' mit' SO_RCVTIMEO'. – user3386109

+0

Vielen Dank! :) – kotecek

Antwort

2

Sie können select() mit Timeout verwenden.

int ret; 
fd_set set; 
struct timeval timeout; 
/* Initialize the file descriptor set. */ 
FD_ZERO(&set); 
FD_SET(recvFD, &set); 

/* Initialize the timeout data structure. */ 
timeout.tv_sec = 30; 
timeout.tv_usec = 0; 

/* select returns 0 if timeout, 1 if input available, -1 if error. */ 
ret = select(recvFD+1, &set, NULL, NULL, &timeout)); 
if (ret == 1) { 
    num_bytes_received = recv(recvFD, line, MAX_LINE_SIZE-1, 0); 
    if(line[0] == 'R') 
    { 
     do_something(); 
    } 

    if(line[0] == 'P') 
    { 
     do_another_thing(); 
    } 
} 
else if (ret == 0) { 
    /* timeout */ 
    do_another_thing(); 
} 
else { 
    /* error handling */ 
} 
+0

Funktioniert wie Charme! Vielen Dank! – kotecek