gpt4 book ai didi

c++ - fork 内的套接字关闭 C++

转载 作者:行者123 更新时间:2023-11-28 03:22:39 25 4
gpt4 key购买 nike

我正在尝试套接字编程和服务器代码:

    while(1) {
sin_size = sizeof (their_addr);
new_fd = accept(sockfd,(struct sockaddr *)&their_addr, &sin_size);
if(new_fd == -1) {
perror("accept");
continue;
}

inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr*)&their_addr),s,sizeof(s));
cout<<"got connection from" << s << endl;

if((pid = fork()) == 0){//child
close(sockfd);
if(send(new_fd,"hello world!",12,0) == -1) {
perror("send");
close(new_fd);
exit(0);
}
char buf[50];
int numbytes;
if((numbytes = recv(new_fd,&buf,50,0)) == -1) {
perror("receive");
close(new_fd);
exit(0);
}
buf[numbytes] = '\0';
cout<<"numbytes" << numbytes <<endl;
cout<<"server received " << buf <<endl;
}
close(new_fd);
}

这段代码给了我一个错误的文件描述符,但是当我评论 close(sockfd) 时,代码运行良好。由于我正在 fork 一个新的子进程并关闭监听端口,为什么我得到一个错误的文件描述符?我在这里遗漏了什么吗?

最佳答案

您关闭 new_fd 两次。收到后关闭一次,然后子进程继续并再次关闭它。您应该将第二个 close 仅放在父进程中,或者根本不在 if (fork()) 主体中关闭。

关于c++ - fork 内的套接字关闭 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15037219/

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