所以我正在使用 UDP 套接字和 poll(),试图能够同时等待连接和读取输入,但我遇到了最奇怪的错误,我不知道如何处理它。这是我的代码中导致问题的部分。
int n=1; //set n =1 so that it can enter first loop
while (1) {
for(int j = 0; j < 2; j++){
printf("loop1\n");
if(n>0){
printf("loop2\n");
mlen = read(sd, buf, BSIZE);
//I would like to use read here, but I've tried both read and recvfrom
//and both have the same issue \/ that's the other code I was trying
//mlen = recvfrom(sd,buf,BSIZE,0,(struct sockaddr *)&cad, &fromlen);
if(mlen<0){
perror("recvfrom");
exit(1);
}
/* more code here that does stuff with buffer info */
}
else {
perror("poll");
exit(1);}
}
}
n = poll(pollarr,2,-1);
printf("now n is %d\n", n);
}
所以这就是奇怪的地方。当我运行此代码时,它会打印出 loop1,但不会打印 loop2,即使我在开头明确设置了 n=1。我将 loop1 打印语句更改为 "printf("now n is %d\n", n);" 看看发生了什么,然后它根本没有打印任何东西。
为了增加这个谜团,无论我使用 read 还是 recv,都会发生这种情况,但是当我注释掉这两个时,我的代码进入两个循环就好了。
因此,在到达这些行之前, read 和 recv 都以某种方式阻止了我的程序以应有的方式运行。我不知道会发生什么,我最好的猜测是这是我不知道的一些晦涩的 C 东西。有谁知道出了什么问题?
如果重要的话,我想我正在使用 Linux。