作者suhanjyun (小白)
看板CSSE
標題[問題] 關於UDP recvfrom的問題
時間Wed Jun 14 03:37:53 2006
最近寫一個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 *) ®isters,
&len) < 0){
perror("master recvfrom");
exit(-1);
}
else{
printf("master recvfrom succeed\n");
}
//recvfrom(r_fd, buf, sizeof(buf), 0,(struct sockaddr *) ®isters,
&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