如何在许多线程中的同一<ip:port>接受TCP连接?

时间:2017-07-09 17:40:35

标签: linux sockets tcp linux-kernel network-programming

如何在Linux(内核3.16)上的一个进程中的多个线程中接受相同ip:port的TCP连接?

我可以为每个线程使用这个socket-acceptor(即4个线程中的4个socket-acceptors)吗?

即。每个线程都有自己的接受器套接字,具有相同的ip_addr:port,而不是为所有线程共享一个接受器套接字。

我应该使用SO_REUSEPORTSO_REUSEADDR吗?

2 个答案:

答案 0 :(得分:0)

我在编写服务器时做了同样的事情。您有一个main方法接受到计算机的传入连接,以及线程来处理每个连接。每次新计算机连接到服务器时,都会创建一个新的连接对象。从main方法中,您必须为每个连接生成一个新线程,并将该连接对象作为参数传递给该线程。例如,这是一个抽象:

void acceptConnections()
{
    while(true)
    {
        connection = socket.accept()
        createNewThread(threadMethod, connection)
    }
}

在您生成的主题中,您可以像正常一样从连接对象接收数据。如果不知道你在使用什么语言,我就无法提供更多细节

答案 1 :(得分:0)

答案是:

  1. 您无法在TCP中执行此操作。
  2. 你不需要它。让所有线程都从同一个套接字接受。