0

所以我正在使用 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。

4

0 回答 0