我想确定我尝试在套接字上使用 accept()
的方式是否正确。
我知道在 Linux 中,listen()
在套接字上是安全的,fork()
N 个 child ,然后是 recv()
所有这些数据包都没有来自用户端的任何同步(数据包或多或少地在 child 之间实现负载平衡)。但那是 UDP。
TCP 和 listen()
、fork()
、accept()
是否具有相同的属性?我是否可以假设接受父创建的共享套接字是可以的,即使其他 child 也这样做? POSIX、BSD 套接字或任何其他标准在某处定义它吗?
最佳答案
如果您先 fork() 然后再在您的子进程中接受 accept(),则只有一个子进程会在一个连接上调用 accept() 然后处理它。这是预 fork ,连接不会在 child 之间共享。
您可以通过颠倒顺序以及接受和 fork 来为每个连接方案执行一个标准的一个 child 。然而,这两种技术都是为了提高效率、平衡等,而不是为了共享特定的连接。
TCP 不同于 UDP。在 TCP 中这样做是不可取的,因为你几乎肯定会以一团糟告终。给定的接收消息可以分布在一个或多个数据包上,与让一个子进程处理连接相比,协调多个进程会更痛苦。
关于linux - 用监听套接字 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755429/