【问题标题】:Mutex lock on fd returned by accept接受返回的 fd 上的互斥锁
【发布时间】:2018-02-20 14:03:34
【问题描述】:

我有一个使用工作线程池实现的客户端/服务器应用程序。 在服务器的主程序中,我创建了一个侦听器套接字,然后对于每个客户端,我使用 accept() 获得一个 fd 来处理客户端的请求。 我的问题是:我是否需要锁定这个 fd 才能读取客户的请求并写入答案和数据?

【问题讨论】:

    标签: sockets server locking client mutual-exclusion


    【解决方案1】:

    不。侦听器套接字是协调点,您不需要显式协调。甚至不清楚“锁定”套接字是什么意思。套接字不会“锁定”。它们可能会或我不会“阻塞”,具体取决于它们的配置方式——这将决定您的操作是在给定的超时后立即返回,还是无限期地等待完成。

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

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

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

    【讨论】:

    • 我的意思是当我使用第二个套接字与客户端通信时是否需要锁定第二个套接字,而不是监听套接字。谢谢你的链接。
    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2012-06-05
    • 2021-06-29
    • 2010-09-16
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多