C ++客户端需要找出套接字被扭曲的服务器

时间:2016-05-02 12:07:52

标签: c++ linux python-2.7 sockets twisted

我有一个扭曲的服务器做某事然后关闭连接。 python客户端了解

clientConnectionLost(self, connector, reason)

连接已关闭且工作正常。 但是,我也有一个与同一个扭曲服务器通信的C ++客户端。它目前似乎不理解连接/套接字已关闭。我该如何检查?

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;
}

是C ++客户端的接收代码。 如何使用C ++客户端实现clientConnectionLost的相同/类似功能?

1 个答案:

答案 0 :(得分:0)

来自man recv

  

当对等体执行有序关闭时,返回值将为0。

所以在recv调用之后,你可以写:

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;
}