【发布时间】:2011-07-23 01:10:08
【问题描述】:
我正在尝试学习Linux环境下C语言socket编程中选项SO_KEEPALIVE的用法。
我创建了一个服务器套接字并使用我的浏览器连接到它。它成功了,我能够读取 GET 请求,但我卡在 SO_KEEPALIVE 的使用上。
我检查了此链接keepalive_description@tldg.org ,但找不到任何说明如何使用它的示例。
一旦我在accept() 函数上检测到客户端的请求,我就会在客户端套接字上设置SO_KEEPALIVE 选项值1。现在我不知道,如何检查客户端是否宕机,如何更改发送的探测之间的时间间隔等。
我的意思是,我将如何获得客户端已关闭的信号? (没有在客户端读取或写入 - 我认为当探针没有从客户端回复时我会收到一些信号),在设置选项 SO_KEEPALIVE 后我应该如何编程)。
另外,如果假设每 3 秒发送一次探测,并且客户端在这之间发生故障,我将不会知道客户端已故障,我可能会收到 SIGPIPE。
无论如何,重要的是我想知道如何在代码中使用 SO_KEEPALIVE。
【问题讨论】:
标签: c linux sockets keep-alive