现在我有一个简单的TCP服务器/客户端。我设置它,以便每当客户端连接它时,fork()和连接本身被置于无限循环中,以便连接保持打开状态。服务器正在从客户端接收信息,我检查以确保收到的字节数>到目前为止,在确定客户是否已断开连接方面,这一直运作良好。但是如果服务器断开连接,客户端也将关闭,但没有设置errno。如何检查以确保服务器仍然连接?

有帮助吗?

解决方案

当另一端断开连接时,套接字将变为可读(套接字读取不会阻塞), read()将返回 0 。这是检测到断开连接的常用方法(听起来你已经在服务器端这样做了。)

如果您在 write()中被阻止或者在另一端关闭的套接字上尝试 write ,您的进程将收到 SIGPIPE signal和 write 将返回 -1 errno 设置为 EPIPE

SIGPIPE 的默认操作是终止进程,所以如果你没有改变它,你的客户端会在尝试写入已经消失的服务器时死掉。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top