linux - 用监听套接字 fork

标签 linux sockets tcp

我想确定我尝试在套接字上使用 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/

相关文章:

c - 如何使用 c 系统调用包装器?

linux - 在没有 ip 的情况下在网络上查找设备

python - 通过其他应用程序在 GtkDrawingArea 中绘图

linux - 通过系统调用监控Linux上的内存

python - 如何在Python中创建TCP服务器?

c - 在远程终端上隐藏光标

c# - 套接字接收挂起

tcp - 为什么TCP/UDP checksum最后补齐了?

c - TCP头端口号偶尔为0

python - Python 中使用 socket.send() 的 UDP 调用非常慢