【发布时间】:2010-06-11 03:30:38
【问题描述】:
可以在多个线程中使用同一个套接字 fd 吗? (通过linux)
【问题讨论】:
标签: linux multithreading sockets
可以在多个线程中使用同一个套接字 fd 吗? (通过linux)
【问题讨论】:
标签: linux multithreading sockets
这取决于您期望发生什么,但是您可以。如果您正在读取每个都是完整消息的 UDP 数据包,这可以很好地工作。如果您正在从 TCP 读取数据流,这可能无法正常工作。
你可以让多个线程在一个套接字上接受传入的连接,并且每个线程都有一个连接,这可以很好地工作。
【讨论】:
尝试从多个线程发送() 或recv() (SOCK_STREAM) 时会遇到并发问题。您应该使用临界区或其他方式来创建对 send() 和 recv() 的串行访问。
与线程有关的一个标准做法是让 master 监听 () 和接受 (),然后将套接字传递给客户端线程,该客户端线程从该套接字发送/接收/处理。客户端线程负责调用 close() 或 shutdown()。
【讨论】: