套接字:当服务器关闭时,客户端退出而没有任何回报

| 我正在建立一个简单的客户端/服务器TCP通信流,而我的问题是,当我终止服务器应用程序时,客户端应用程序会正常退出。没有输出到STDERR,并且recv()不返回0或-1,客户端应用程序只是停止。 另一方面,如果我终止了客户端应用程序,则服务器应用程序将从send()获得返回值0,这是预期的。 非常感谢在此问题上的任何帮助!     
已邀请:
        这可能是由于引发了“ 0”,这是在尝试写入另一端已关闭的连接时发生的。默认情况下,“ 0”将立即终止该过程,以防止浪费大量系统资源来生成无处输出的输出。为防止这种情况,您可以忽略该信号:
signal(SIGPIPE, SIG_IGN);
如果执行此操作,则
send
调用应会按预期运行。     
        当您终止客户端应用程序时,操作系统将关闭其所有打开的IO句柄。这样关闭TCP连接时,它将FIN发送到其对等方。在这方面,杀死您的客户与正常退出没有区别。 一旦建立了TCP连接,就没有“客户端”和“服务器”的概念。这是一个简单的双向通讯渠道。从网络/套接字的角度来看,无论哪一方中止,结果都是相同的。 如果您看到行为上的差异,那么就在两个应用程序的编程中。阻塞的“ 4”调用应返回连接关闭时可用的字节数,如果有错误,则返回-1。 我建议在您的进程中使用ѭ5来确切了解该系统调用正在发生的情况。     

要回复问题请先登录注册