gpt4 book ai didi

套接字文件描述符可以传递给子进程吗?

转载 作者:行者123 更新时间:2023-11-30 14:45:02 24 4
gpt4 key购买 nike

我目前正在编写一个程序,它是一个多处理服务器应用程序。我当前的想法是,对于每个传入的 TCP 连接,我接受它并将传入的套接字描述符传递给使用 fork() 创建的子进程。两个进程中的套接字描述符是否相同,或者是否会发生未定义的行为?看起来我可以从传入的套接字读取但不能写入它。

最佳答案

来自man accept强调我的:

RETURN VALUE

On success, these system calls return a nonnegative integer that is afile descriptor for the accepted socket.

来自man fork强调我的:

  • The child inherits copies of the parent's set of open file descriptors. Each file descriptor in the child refers to the same open file description (see open(2)) as the corresponding file descriptor in the parent. This means that the two descriptors share open file status flags, current file offset, and signal-driven I/O attributes (see the description of F_SETOWN and F_SETSIG in fcntl(2)).

在父/服务器中打开的每个接受的连接在子服务器中都将完全相同。如果您的 child 不能写信,那才奇怪。

通常服务器看起来像这样:

while (..) {
int newconnection = accept(..);
switch (fork()) {
case 0:
child_handle_connection(newconnection);
break;
...
}
close(newconnection);
....
}

比较:我从 google 获得的关于“示例 http 服务器 C”的第一个结果为 this source file .

关于套接字文件描述符可以传递给子进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com