加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:04:05 所属栏目:百科 来源:网络整理
导读:我有个问题 : ???????? – 对于客户端发送的每条消息,服务器都会创建一个子进程(fork()),并且每个消息都由另一个子进程读取. ????????问题: ???????? – 有什么方法可以擦除sockaddr_in结构,这样当服务器在无限循环中再次进入一个时,它会等待一个不同的客
我有个问题 :
???????? – 对于客户端发送的每条消息,服务器都会创建一个子进程(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 connectionn");
            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 = %dn",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()关闭传递读取消息的子节点,然后重新开始阅读下一条消息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读