【发布时间】:2016-02-13 20:16:52
【问题描述】:
我正在使用 libfcgi (fcgiapp) 库编写一个 FastCGI 应用程序。问题出在FCGX_Accept_r 方法中,该方法等待传入连接并阻塞线程。如我所见,它没有任何类型的超时,因此程序流在请求到达之前无法继续执行。
我尝试在FCGX_InitRequest 方法中设置FCGI_FAIL_ACCEPT_ON_INTR 标志以使accept 函数中断,但没有成功。
设置 FCGI_FAIL_ACCEPT_ON_INTR 可防止 FCGX_Accept() 在被中断时重新启动。
我也尝试拨打FCGX_ShutdownPending,但它似乎拒绝新传入连接,并且没有停止监听下一个。
防止库接受任何新请求。信号处理程序安全。
你能告诉我还有什么办法可以打破FCGX_Accept_r等待吗?
【问题讨论】:
-
@SergeyA 感谢您的关注。我从
std::thread实例中调用FCGX_Accept_r。我尝试将 SIGTERM 和 SIGINT 发送到正在运行的应用程序,它们由处理函数处理,但这不会影响FCGX_Accept_r正在运行的线程。 -
需要转发到运行这个函数的线程。您需要设置线程信号处置方式,使该线程能够看到信号。
标签: c++ multithreading fastcgi