【问题标题】:Socket fd in multithreading多线程中的套接字 fd
【发布时间】:2010-06-11 03:30:38
【问题描述】:

可以在多个线程中使用同一个套接字 fd 吗? (通过linux)

【问题讨论】:

    标签: linux multithreading sockets


    【解决方案1】:

    这取决于您期望发生什么,但是您可以。如果您正在读取每个都是完整消息的 UDP 数据包,这可以很好地工作。如果您正在从 TCP 读取数据流,这可能无法正常工作。

    你可以让多个线程在一个套接字上接受传入的连接,并且每个线程都有一个连接,这可以很好地工作。

    【讨论】:

      【解决方案2】:

      尝试从多个线程发送() 或recv() (SOCK_STREAM) 时会遇到并发问题。您应该使用临界区或其他方式来创建对 send() 和 recv() 的串行访问。

      与线程有关的一个标准做法是让 master 监听 () 和接受 (),然后将套接字传递给客户端线程,该客户端线程从该套接字发送/接收/处理。客户端线程负责调用 close() 或 shutdown()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 2013-05-03
        • 2011-02-11
        相关资源
        最近更新 更多