在 Unix 上用 C 取消 UDP 接收

发布于 2024-08-25 05:47:09 字数 325 浏览 4 评论 0原文

我刚刚开始学习 C 网络编程的工作原理,并且我编写了一个小程序,用于向 UNIX 终端发送消息或从 UNIX 终端发送消息。我在程序中使用 pthreads,其中一个线程本质上只是等待 recvfrom() 接收消息。

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

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

谢谢。

I'm just starting to learn how network programming in C works, and I've written a small program that sends messages to and from a UNIX terminal. I'm using pthreads in my program, one of which essentially just waits on recvfrom() to receive a message.

However, I want to be able to close all threads properly if the users chooses to quit the program. The way I have it set up right now, a different thread just cancels the thread waiting on recvfrom, but I'm worried this might not be a good idea since I'm leaving sockets unclosed and I'm not freeing all the memory I allocated.

Is there a way to cancel a recvfrom() call, or some way to run a certain routine upon cancelling a pthread?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

以往的大感动 2024-09-01 05:47:09

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

If you use pthread_kill to send a signal to the thread, recvfrom() should return -1 with errno set to EINTR - you can then check for the "application is now exiting" condition and finish up gracefully.

三生池水覆流年 2024-09-01 05:47:09

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

Another approach would be to maintain a list of open connection matched with thread id's. Then whenever you cancel a thread go through the list to find it's socket and call close on the socket.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文