假设我启动了一个线程来接收某个端口的数据。socket调用将在recvfrom上阻塞。然后,在另一个线程中,我关闭了这个socket。
在Windows上,这将解除recvfrom的阻塞,我的线程执行将终止。
但在Linux上,这并不会解除recvfrom的阻塞,因此,我的线程将永远无所作为,并且线程执行不会终止。
有人能帮我解释一下在Linux上发生了什么吗?当socket被关闭时,我希望recvfrom能够解除阻塞。
我一直在阅读关于使用select()的文章,但不知道如何针对我的特定情况使用它。
在Windows上,这将解除recvfrom的阻塞,我的线程执行将终止。
但在Linux上,这并不会解除recvfrom的阻塞,因此,我的线程将永远无所作为,并且线程执行不会终止。
有人能帮我解释一下在Linux上发生了什么吗?当socket被关闭时,我希望recvfrom能够解除阻塞。
我一直在阅读关于使用select()的文章,但不知道如何针对我的特定情况使用它。
recvfrom
的阻塞,因为存在固有的竞争问题,只能通过用户空间中的同步来解决。 - David Schwartz