我有一些代码会生成一个pthread
尝试维护与远程主机的套接字连接的代码。如果连接丢失,它会尝试connect()
在其套接字上使用阻塞调用重新连接。由于代码在单独的线程中运行,我并不真正关心它使用同步套接字 API 的事实。
也就是说,直到我的应用程序退出的时候。我想执行一些类似的有序关闭,所以我使用线程同步原语来唤醒线程并发出信号让它退出,然后pthread_join()
在线程上执行 a 以等待它完成。connect()
这很好用,除非当我命令关闭时线程处于调用中间。在这种情况下,我必须等待连接超时,这可能需要很长时间。这使得应用程序似乎需要很长时间才能关闭。
我想做的是以connect()
某种方式中断对的呼叫。调用返回后,线程会注意到我的退出信号并干净地关闭。由于connect()
是系统调用,我认为我可以使用信号故意中断它(从而使调用返回EINTR
),但我不确定这是否是 POSIX 线程环境中的稳健方法。
有没有人对如何做到这一点有任何建议,无论是使用信号还是通过其他方法?请注意,connect()
在一些我无法修改的库代码中调用已关闭,因此不能选择更改为非阻塞套接字。