【问题标题】:sharing socket descriptor between multiple threads在多个线程之间共享套接字描述符
【发布时间】:2012-04-22 20:18:06
【问题描述】:

只是一个简单的问题。我有一个网络 C 应用程序(TCP 服务器),它有多个工作线程(Pthreads)。每个工作线程使用一个 select 系统调用,每个线程都将监听 socket descriptor 添加到其选择集中。因此,每个工作线程都有效地侦听传入的连接,并且一次只有一个线程成功接受特定连接,并且该连接的 socket descriptor 被添加到相应线程的 select 集合中。

我的问题是每个线程都有自己的select 集,我是否可以向套接字描述符位于另一个工作线程选择集中的客户端发送或接收数据?换句话说,我可以使用任何工作线程的选择集中的套接字描述符来从我想要的任何线程执行 I/O 吗? 谢谢

【问题讨论】:

    标签: c multithreading sockets select network-programming


    【解决方案1】:

    您可以在不同线程之间共享套接字和文件描述符。大多数服务器都是这样做的。

    【讨论】:

    • 抱歉双重检查:/这意味着如果一个线程接受一个连接并且返回的文件描述符被添加到其他线程选择集中,他们都能够从该描述符写入/读取,对吗?
    • AFAIK,是的,在创建/接受 FD 的线程中应该没有区别。
    • 非常感谢。非常感谢:)
    • @Abdullah 在不同线程中使用相同的套接字是可以的,但是您可能应该确保一次从一个线程读取/写入套接字以避免可能的数据交错。
    猜你喜欢
    • 2019-03-29
    • 2012-12-03
    • 2020-12-03
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多