在套接字编程时从服务器捕获客户端出口 我需要对C++(或C)中的套接字错误处理有一些了解。 我正在测试一个简单的客户端和服务器程序,如下所示: ..... while (1) { // server keeps sending strings to client sprintf(jsonStr, "{ \"%d: Hello\": \"world!\" } \n", index++); size = send(newsockfd, jsonStr, strlen(jsonStr), 0); if (size == -1) { error("ERROR on send"); } sleep(1); } .....

在套接字编程时从服务器捕获客户端出口 我需要对C++(或C)中的套接字错误处理有一些了解。 我正在测试一个简单的客户端和服务器程序,如下所示: ..... while (1) { // server keeps sending strings to client sprintf(jsonStr, "{ \"%d: Hello\": \"world!\" } \n", index++); size = send(newsockfd, jsonStr, strlen(jsonStr), 0); if (size == -1) { error("ERROR on send"); } sleep(1); } .....,c++,linux,sockets,C++,Linux,Sockets,当客户机从服务器接收字符串时,若我杀死客户机,服务器也会在没有任何消息的情况下退出。 这是预期的吗?我怎样才能抓住它而不是离开?我试着“尝试”和“接住”,但没能接住。 在java中,我使用DataOutputStream.writeUTF()获得“断管”SocketException。 我在Mac和Linux上进行了测试,结果是一样的 我使用以下示例代码: 提前感谢。尝试在断开的插座上发送将发出SIGPIPE信号。接收SIGPIPE时的默认行为是终止进程(这是您正在观察的行为) 您可以通过以下方

当客户机从服务器接收字符串时,若我杀死客户机,服务器也会在没有任何消息的情况下退出。 这是预期的吗?我怎样才能抓住它而不是离开?我试着“尝试”和“接住”,但没能接住。 在java中,我使用DataOutputStream.writeUTF()获得“断管”SocketException。 我在Mac和Linux上进行了测试,结果是一样的

我使用以下示例代码:


提前感谢。

尝试在断开的插座上发送将发出SIGPIPE信号。接收SIGPIPE时的默认行为是终止进程(这是您正在观察的行为)

您可以通过以下方式解决此问题:

  • 忽略信号(在任何平台上工作)
  • 设置
    SO\u NOSIGPIPE
    socket选项(仅限Mac/BSD)
  • 传递要发送的
    MSG\u NOSIGNAL
    标志(仅限Linux)
如果在断开的套接字上执行写操作,send应返回-1,并将errno设置为EPIPE

有关处理SIGPIPE的更多详细信息,请参阅:


尝试在断开的插座上发送信号将发出SIGPIPE信号。接收SIGPIPE时的默认行为是终止进程(这是您正在观察的行为)

您可以通过以下方式解决此问题:

  • 忽略信号(在任何平台上工作)
  • 设置
    SO\u NOSIGPIPE
    socket选项(仅限Mac/BSD)
  • 传递要发送的
    MSG\u NOSIGNAL
    标志(仅限Linux)
如果在断开的套接字上执行写操作,send应返回-1,并将errno设置为EPIPE

有关处理SIGPIPE的更多详细信息,请参阅: