【问题标题】:Cancel UDP recvfrom in C on Unix在 Unix 上的 C 中取消 UDP recvfrom
【发布时间】:2010-03-16 04:47:55
【问题描述】:

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

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

有没有办法取消recvfrom() 调用,或者有什么方法可以在取消pthread 时运行某个例程?

谢谢。

【问题讨论】:

    标签: c network-programming udp pthreads


    【解决方案1】:

    如果您使用pthread_kill 向线程发送信号,recvfrom() 应该返回 -1,errno 设置为 EINTR - 然后您可以检查“应用程序现在正在退出”条件并完成优雅地。

    【讨论】:

      【解决方案2】:

      另一种方法是维护与线程 ID 匹配的打开连接列表。然后,每当您取消一个线程时,请通过列表查找它的套接字并在套接字上调用 close。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        • 2016-01-09
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 2023-04-04
        相关资源
        最近更新 更多