2010-03-16 53 views
0

我刚刚开始学习C中的网络编程是如何工作的,并且我编写了一个向UNIX终端发送消息的小程序。我在我的程序中使用pthreads,其中一个基本上只是在recvfrom()上等待接收消息。在Unix上用C取消UDP recvfrom

但是,如果用户选择退出程序,我希望能够正确关闭所有线程。现在我已经设置了它的方式,一个不同的线程只是取消了recvfrom的线程,但我担心这可能不是一个好主意,因为我离开套接字未关闭,我没有释放所有的内存分配。

有没有办法取消recvfrom()调用,或某种方式来取消pthread时运行某些例程?

谢谢。

回答

1

如果使用pthread_kill发送信号给线程,recvfrom()应该返回-1,errno设置为EINTR - 那么你可以检查“应用程序现在退出”的条件和优雅的完成了。

1

另一种方法是维护与线程ID匹配的打开连接列表。然后,无论何时取消线程,都要通过列表找到它的套接字并在套接字上调用close。