在套接字编程时从服务器捕获客户端出口 我需要对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); } .....
当客户机从服务器接收字符串时,若我杀死客户机,服务器也会在没有任何消息的情况下退出。 这是预期的吗?我怎样才能抓住它而不是离开?我试着“尝试”和“接住”,但没能接住。 在java中,我使用DataOutputStream.writeUTF()获得“断管”SocketException。 我在Mac和Linux上进行了测试,结果是一样的 我使用以下示例代码:在套接字编程时从服务器捕获客户端出口 我需要对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时的默认行为是终止进程(这是您正在观察的行为) 您可以通过以下方
提前感谢。尝试在断开的插座上发送将发出SIGPIPE信号。接收SIGPIPE时的默认行为是终止进程(这是您正在观察的行为) 您可以通过以下方式解决此问题:
- 忽略信号(在任何平台上工作)
- 设置
socket选项(仅限Mac/BSD)SO\u NOSIGPIPE
- 传递要发送的
标志(仅限Linux)MSG\u NOSIGNAL
- 忽略信号(在任何平台上工作)
- 设置
socket选项(仅限Mac/BSD)SO\u NOSIGPIPE
- 传递要发送的
标志(仅限Linux)MSG\u NOSIGNAL