我有一个用worker线程池实现的客户机/服务器应用程序。在服务器的main中,我创建了一个监听程序套接字,然后对于每个客户机,我都使用了一个带accept()的fd来处理客户机的请求。我的问题是:我需要在这个fd上加一个锁来读取客户端的请求并写入答案和数据吗?
发布于 2018-02-20 22:19:41
不是的。侦听器套接字是协调点,您不需要显式协调。甚至不清楚“锁定”套接字意味着什么;套接字不会“锁定”。它们可能会“阻塞”,也可能不会“阻塞”,这取决于它们是如何配置的--这将决定您的操作是立即返回,还是在给定的超时后无限期等待完成。
在侦听套接字上成功accept()时,结果是第二个套接字-这是您用来与客户端通信的套接字,而不是侦听器套接字。
当然,如果您的应用程序是多线程的,那么您的/threads/可能需要锁定或互斥才能获得正确的行为。细节将根据您的实际设计和套接字IO状态与线程的交互方式而变化,这可能会变得非常复杂/棘手。您需要发布代码以获得更具体的答案。
即使是单线程套接字IO,也有更多细节。请参阅https://cis.temple.edu/~giorgio/old/cis307s96/readings/docs/sockets.html
https://stackoverflow.com/questions/48887048
复制相似问题