2016-05-02 5 views
0

geschlossen Ich habe einen verdrehten Server, der etwas macht und dann die Verbindung schließt. Die Python-Clients verstehen mitC++ Client muss herausfinden, Socket wurde von Twisted-Server

clientConnectionLost(self, connector, reason) 

, dass die Verbindung geschlossen wurde und das funktioniert gut. Allerdings habe ich auch einen C++ Client, der mit dem gleichen twisted Server kommuniziert. Es scheint derzeit nicht zu verstehen, dass die Verbindung/Socket geschlossen wurde. Wie überprüfe ich dies?

string tcp_client::receive(int size=1024) 
{ 
    char buffer[size]; 
    string reply; 

    int msg = recv(sock , buffer , sizeof(buffer) , 0); 

    // Receive a reply from the server 
    if(msg < 0) 
    { 
     puts("recv failed"); 
     // Exit the programm 
     exit(0); 
    } 
    reply = buffer; 
    return reply; 
} 

ist der Empfangscode des C++ Clients. Wie erreiche ich die gleiche/ähnliche Funktionalität von clientConnectionLost mit dem C++ Client?

+0

Haben Sie versucht, Trapping 'SIGPIPE'? –

+0

Entschuldigung, aber das bedeutet mir nicht viel ... Könntest du ein wenig weiter ausführen? –

Antwort

0

Von man recv:

Der Rückgabewert ist 0, wenn der Peer ein ordnungsgemäßes Abschalten durchgeführt hat.

So nach recv Anruf, können Sie schreiben:

string tcp_client::receive(int size=1024) 
{ 
    char buffer[size]; 
    string reply; 

    // Receive a reply from the server 
    int msg = recv(sock , buffer , sizeof(buffer) , 0); 

    if(msg < 0) 
    { 
     puts("recv failed"); 

     // Exit the programm 
     exit(0); 
    } 
    else if (0 == msg) 
    { 
     // the connexion has been closed by server 
     puts("Connexion lost!"); 

     // close the socket 
     close(sock); 

     // return something 
     return string(""); 
    } 
    reply = buffer; 
    return reply; 
} 
+0

Danke, das war super !!! : D –