如何检测本地主机关闭的连接?

发布于 2024-12-03 07:43:28 字数 308 浏览 1 评论 0原文

我用 C 语言编写了 TCP 客户端和服务器。这些软件仅在同一台计算机上运行。

1) 我的 TCP 客户端向服务器 (localhost) 发送命令。

2)服务器努力工作并给出响应。

问题是,如果 TCP 客户端关闭连接,我无法检测到客户端连接已关闭,而服务器将执行长时间的工作。我只能用 SEND 函数检测到这一点,但为时已晚,因为服务器已经工作了。

我知道如果机器是远程的,那么进行这种检测一定非常困难。就我而言,它是同一台机器,这应该使任务更容易,但我还没有找到解决方案......可以使用选择功能吗?

感谢您。

I have write a TCP client and server in C. These software run on the same computer ONLY.

1) My TCP client send a command to the server (localhost).

2) The server works hard and give a response.

The problem is if the TCP Client closes the connection, I am unable to detect a client connection closed WHILE server is going to do its long work. I can only detect this with the SEND function, but it's too late because the server have already work.

I understand that this must be very hard to make this detection if the machines are remote. In my case, it is the same machine, which should make the task easier, but I have not found a solution ... Can be with the select function?

Thanks you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暗喜 2024-12-10 07:43:28

您可以使用 select 来完成此操作,如下所示:

  • 使用 select 读取套接字上的事件。因此,当套接字可读时,select解除阻塞当
  • 请求到达服务器时,在不同的线程中开始工作
  • 当客户端关闭连接时,select 将解除阻塞,并且 recv 将读取 0 个字节。如果是这样,你可以停止工作线程
  • 如果工作线程完成任务而没有被中断,它可以发送结果

You can do it with select like this:

  • Use select for read events on the socket. So select unblocks when the socket is readable
  • When a request arrives at the server, start work in a different thread
  • When the client closes the connection, select will unblock and recv will read 0 bytes. If so, you can stop the worker thread
  • If the worker thread finishes the task without being interrupted, it can send the result
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文