多线程中的套接字fd

时间:2010-06-11 03:30:38

标签: linux multithreading sockets

在多个线程中使用相同的套接字fd是否可以? (通过linux)

2 个答案:

答案 0 :(得分:3)

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

您可以让多个线程接受套接字上的传入连接,并且当每个线程获得一个连接时,它可以很好地工作。

答案 1 :(得分:1)

您将遇到尝试从多个线程发送()或recv()(SOCK_STREAM)的并发问题。您应该使用关键部分或其他方法来创建send()和recv()的串行访问。

线程的一个标准做法是让主人听()& accept(),然后将套接字传递给从该套接字发送/接收/进程的客户端线程。客户端线程负责调用close()或shutdown()。