接受

时间:2018-02-20 14:03:34

标签: sockets server locking client mutual-exclusion

我有一个使用worker的线程池实现的客户端/服务器应用程序。 在服务器的主要部分,我创建一个监听器套接字,然后为每个客户端我得到一个带有accept()的fd来处理客户端的请求。 我的问题是:我是否需要锁定此fd以读取客户端的请求并编写答案和数据?

1 个答案:

答案 0 :(得分:0)

不。监听器套接字是协调点,您不需要明确协调。它甚至不清楚什么"锁定"插座装置;插座没有锁定"。他们可能或我不会"阻止"取决于它们的配置方式 - 这将决定您的操作是在给定的超时后立即返回,还是无限期地等待完成。

当成功监听套接字accept()时,结果是第二个套接字 - 这是用于与客户端通信的套接字,而不是侦听器套接字。

当然,如果您的应用程序是多线程的,您的/ threads /可能需要锁定或互斥以获得正确的行为。细节将根据您的实际设计以及套接字IO状态与线程交互的方式而变得非常复杂/棘手。您需要发布代码以获得更具体的答案。

甚至单线程套接字IO还有更多细节。见https://cis.temple.edu/~giorgio/old/cis307s96/readings/docs/sockets.html