精華區beta CSSE 關於我們 聯絡資訊
最近寫一個udp程式,假設說,如果當client的sendto沒有寄出去,那recvfrom就會 接收不到,那我要怎樣讓recvfrom停止繼續等待? 有沒有停止recvfrom wait的信號呢?或是誰有範例程式可以提供的,謝謝。 void sig_inter(); void sig_alarm(); . . . /* init signal handlers */ signal(SIGINT, sig_inter); signal(SIGALRM, sig_alarm); . . . while(1){ /* alarm signal causes exit */ printf("recvfrom registers :wait...\n"); alarm(1); /* set a 1-second alarm */ buf[0] = '\0'; /* clear input buf */ /* wait for registration or alarm */ if(recvfrom(r_fd, buf, sizeof(buf), 0,(struct sockaddr *) &registers, &len) < 0){ perror("master recvfrom"); exit(-1); } else{ printf("master recvfrom succeed\n"); } //recvfrom(r_fd, buf, sizeof(buf), 0,(struct sockaddr *) &registers, &len); if(Alarm) break; alarm(0); /* cancel alarm timer */ if((p=strchr(buf, '.')) != NULL) *p = '\0'; /* trunc .domain */ printf("\tSlave on host '%s' registered\n", buf); strcpy(hosts[count++], buf); } . . . void sig_alarm() { printf("Invoke alarms and Alarm %d",Alarm); /* reestablish handler */ signal(SIGALRM, sig_alarm); Alarm = TRUE; /* set flag */ printf(" to %d\n",Alarm); } /**************/ /*** ^C key ***/ /**************/ void sig_inter() { Running = FALSE; /* set flag */ return; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.140.180
konaco:簡單的解法可以用sys/select.h 06/14 03:43