相关疑难解决方法(0)

如何使用sendmsg()通过两个进程之间的套接字发送文件描述符?

@cnicutar在这个问题上回答我之后,我试图从父进程向其子​​进程发送文件描述符.基于这个例子,我写了这段代码:

int socket_fd ,accepted_socket_fd, on = 1;
int server_sd, worker_sd, pair_sd[2];
struct sockaddr_in client_address;
struct sockaddr_in server_address;

/* =======================================================================
 * Setup the network socket.
 * =======================================================================
 */

if((socket_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
    perror("socket()");
    exit(EXIT_FAILURE);
}

if((setsockopt(socket_fd, SOL_SOCKET,  SO_REUSEADDR, (char *) &on, sizeof(on))) < 0)
{
    perror("setsockopt()");
    exit(EXIT_FAILURE);
}

server_address.sin_family = AF_INET;                 /* Internet address type */
server_address.sin_addr.s_addr = htonl(INADDR_ANY);  /* Set for any local IP */
server_address.sin_port = htons(port);               /* Set to the …
Run Code Online (Sandbox Code Playgroud)

c sockets linux network-programming file-descriptor

6
推荐指数
2
解决办法
2万
查看次数

父母和预分叉儿童之间的文件描述符共享

在Unix网络编程中,有一个预分叉服务器的例子,该服务器使用Unix域管道上的消息传递来指示子进程处理传入连接:

for ( ; ; ) {
    rset = masterset;
    if (navail <= 0)
        FD_CLR(listenfd, &rset);    /* turn off if no available children */
    nsel = Select(maxfd + 1, &rset, NULL, NULL, NULL);

        /* 4check for new connections */
    if (FD_ISSET(listenfd, &rset)) {
        clilen = addrlen;
        connfd = Accept(listenfd, cliaddr, &clilen);

        for (i = 0; i < nchildren; i++)
            if (cptr[i].child_status == 0)
                break;              /* available */

        if (i == nchildren)
            err_quit("no available children");
        cptr[i].child_status = 1;   /* mark child …
Run Code Online (Sandbox Code Playgroud)

unix sockets linux network-programming

1
推荐指数
1
解决办法
1631
查看次数

标签 统计

linux ×2

network-programming ×2

sockets ×2

c ×1

file-descriptor ×1

unix ×1