在 Linux 中,可以使用 fork() 函数创建子进程,然后将监听套接字从父进程转移到子进程,以便子进程可以接受客户端的连接请求。

以下是一个简单的示例代码:

#include <sys/socket.h>
#include <unistd.h>

int main() {
    int listenfd = socket(AF_INET, SOCK_STREAM, 0); // 创建套接字
    // 绑定和监听套接字
    struct sockaddr_in servaddr;
    servaddr.sin_family = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port = htons(8080);
    bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
    listen(listenfd, SOMAXCONN);

    // 创建子进程
    pid_t pid = fork();
    if (pid < 0) {
        // fork 失败
        perror("fork error");
        return -1;
    } else if (pid == 0) {
        // 子进程
        close(listenfd); // 子进程不需要监听套接字
        // 处理客户端连接请求
        // ...
        return 0;
    } else {
        // 父进程
        // 将监听套接字从父进程转移到子进程
        return listenfd;
    }
}

在上面的代码中,首先创建了一个监听套接字 listenfd,并绑定和监听了该套接字。然后使用 fork() 函数创建了一个子进程,父进程将监听套接字 listenfd 的文件描述符返回,子进程关闭了该文件描述符,然后在子进程中处理客户端连接请求。这样就实现了将监听套接字从父进程转移到子进程的功能。

Linux 监听套接字父进程到子进程转移 - 示例代码

原文地址: http://www.cveoy.top/t/topic/kTwI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录