如何使用FCGI检测客户端终止的连接?

时间:2011-07-11 16:37:37

标签: c sockets fastcgi

我有一个用C语言编写的FCGI应用程序。我们遇到客户端关闭活动连接的情况 - 即。在页面加载期间离开页面 - 如果可能的话,我们希望在应用程序中检测到该页面。我们的Web服务器(nginx)配置为在客户端连接意外关闭时关闭FCGI连接,所以我希望通过查看事务结束时的FCGI流状态,我们可能能够检测客户端发起的封闭连接。

我的问题是:在调用FCGX_Finish_r()之前,是否可以在输出流上使用FCGX_GetError()检测到这一点?如果没有,我怎么能陷入这样的状况呢?

我尝试在FastCGI邮件列表上询问,但似乎列表已关闭。

2 个答案:

答案 0 :(得分:0)

如果数据已通过套接字传输并且发生错误,FCGX_GetError()将返回errno,您也可以使用FCGX_PutStr() < 0检测到此情况。 libfcgi使用8192字节的大小在内部缓冲输出流,在调用FCGX_Finish_r()时传输任何剩余的缓冲区。

答案 1 :(得分:0)

当客户端关闭连接时,您应该收到SIGPIPE。通常,忽略此信号是安全的。但是如果你需要检测这个,只需为SIGPIPE安装处理程序。