我正在C
进行套接字编程,我想做以下事情:
pid = fork();
if(pid == 0){
//child process
for(int m=0;m<2;m++){
j=0;
for(i=0;i<len_neighbors;i++){
socket_des1[i] = get_socket_connection_client(hostname1, neighbor_socket[i],(char *) "udp");
//sending data to other routers
cout<<"\nMessage: Sending routing table to neighbor, "<<neighbors[i];
if (send(socket_des1[i], &message1[0], message1.length(), 0) < 0){
perror("\nError:Message sending failed\n");
exit(1);
}
j++;
}
for(i=0;i<len_neighbors;i++){
close(socket_des1[i]);
}
sleep(30);
cout<<"Hello";
}
}else{
// code for parent process
}
所以基本上这个过程会将数据发送给所有邻居和goto睡眠。这里发生的是进程将数据发送到第一个邻居然后休眠30秒。如何强制进程完成发送,然后执行sleep(30)
语句。
我正在使用forking进程。上面的代码是子进程的一部分。
答案 0 :(得分:0)
我只能猜出是什么问题(请添加子代码创建来检查),我认为当第一个子代码执行此代码时,邻居的数量为0,第二个数字为1,等等。我会在开始时尝试睡眠,这样就可以在发送所有信息之前为其他孩子提供足够的时间来分叉。
答案 1 :(得分:0)
您似乎尝试使用udp协议的send函数。这是错误的。使用sendto
答案 2 :(得分:0)
您正在将消息打印到缓冲的标准输出流。也许你的消息在缓冲区中,直到你延迟30秒后打印? 尝试使用cerr而不是cout。或者冲洗。