代码之家  ›  专栏  ›  技术社区  ›  hora

在UNIX上取消c中的udp recvfrom

  •  0
  • hora  · 技术社区  · 14 年前

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

    但是,如果用户选择退出程序,我希望能够正确关闭所有线程。按照我现在设置的方式,另一个线程只是取消等待recvFrom的线程,但我担心这可能不是一个好主意,因为我会让套接字保持未关闭状态,并且我不会释放我分配的所有内存。

    有没有办法取消 RevFor() 调用,还是在取消pthread时运行某个例程的某种方法?

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   caf    14 年前

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

        2
  •  1
  •   Robert S. Barnes Antoni    14 年前

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