微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 如何让每个子进程获得不同的客户端地址(UDP SOCKET)?

我有个问题 :
         – 对于客户端发送的每条消息,服务器都会创建一个子进程(fork()),并且每个消息都由另一个子进程读取.
        问题:
         – 有什么方法可以擦除sockaddr_in结构,这样当服务器在无限循环中再次进入一个时,它会等待一个不同的客户端,每个孩子都会有一个不同的客户端地址.

A part of the server code:

    struct sockaddr_in from;
    int main(int argc,char *argv[]) {
            int32_t stringLen;
            initSocket();
            printf("waiting for a connection\n");
            while (true) {
                int n;
                socklen_t length = sizeof(struct sockaddr_in);
                n = recvfrom(sock,&stringLen,sizeof(stringLen),(struct sockaddr *) &from,&length);
                if (n > 0) {
                    int pid = fork();
                    printf("fork() pid = %d\n",pid);
                    if (pid < 0) {
                        error("handling request");
                    }
                    if (pid == 0) {
                        printf("Client connected...\n");
                        handle_request(stringLen);
                    }
                    cout << " PID : " << pid << endl;
                }
            }
        }

Thank you !

解决方法

正如我在评论中已经提到的:读取是由同一个套接字上的所有进程完成的,因为后者在fork()时被复制.

你最好让父母读取整个消息,然后fork()关闭传递读取消息的子节点,然后重新开始阅读下一条消息.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐