我有一个用C语言编写的FCGI应用程序。我们遇到客户端关闭活动连接的情况 - 即。在页面加载期间离开页面 - 如果可能的话,我们希望在应用程序中检测到该页面。我们的Web服务器(nginx)配置为在客户端连接意外关闭时关闭FCGI连接,所以我希望通过查看事务结束时的FCGI流状态,我们可能能够检测客户端发起的封闭连接。
我的问题是:在调用FCGX_Finish_r()之前,是否可以在输出流上使用FCGX_GetError()检测到这一点?如果没有,我怎么能陷入这样的状况呢?
我尝试在FastCGI邮件列表上询问,但似乎列表已关闭。
答案 0 :(得分:0)
如果数据已通过套接字传输并且发生错误,FCGX_GetError()
将返回errno
,您也可以使用FCGX_PutStr() < 0
检测到此情况。 libfcgi使用8192字节的大小在内部缓冲输出流,在调用FCGX_Finish_r()
时传输任何剩余的缓冲区。
答案 1 :(得分:0)
当客户端关闭连接时,您应该收到SIGPIPE。通常,忽略此信号是安全的。但是如果你需要检测这个,只需为SIGPIPE安装处理程序。