如何检测localhost关闭的连接?

时间:2011-09-06 12:56:22

标签: c winapi winsock

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

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

2)服务器努力工作并做出回应。

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

据我所知,如果机器是远程的,必须非常难以进行此检测。在我的情况下,它是同一台机器,这应该使任务更容易,但我还没有找到解决方案...可以使用选择功能?

谢谢你。

1 个答案:

答案 0 :(得分:1)

您可以使用select这样做:

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