如何捕捉断开事件?

时间:2011-02-11 20:47:48

标签: c

我是C中的真正的菜鸟。我正在尝试用C开发自己的锁服务器(仅用于练习)。我有一个问题......让我们假设我们有用C编写的服务器,我们有远程主机通过socket连接到这个服务器。连接启动时 - 我的服务器在内存中创建了指针。远程主机断开连接时是否可以删除此指针?如何捕获断开事件?

谢谢

2 个答案:

答案 0 :(得分:0)

当套接字的另一端关闭连接时,read(2)系统调用将返回零。

答案 1 :(得分:0)

在现实世界的场景中,您无法真正检测到断开连接。相反,你必须:

  1. 收到一个表示另一方打算断开连接的数据包。
  2. 尝试传输由于通信之间的“静默”期间连接发生变化而无法传送的包。
  3. 这意味着“必须”确保连接的系统通常会发送和接收定期的“虚拟”消息,以便比仅通过“常规”流量检测到的更快地检测到连接丢失。

    根据您的应用程序,保持活动消息的开销可能不值得付出努力。

    您在网络侧的“连接”实际上只是一堆允许您传输和接收的数据结构。 “TCP / IP”的较低“IP”层是无连接的,这意味着在您尝试使用它之前,您将不知道您的模拟“连接”是否可用(或者接收一个包,明确告诉您另一端不会处理更多数据)。