[英]How can I use SIGALRM to abort my server connection?
我现在使用fork()来实现TFTP服务器。 如果我的服务器在20 SIGALRM
内没有收到对方的声音,如何使用SIGALRM
中止连接?
这是我的代码的一部分:
while (1)
{
pid = fork();
if ( pid == -1 )
{
return EXIT_FAILURE;
}
if ( pid > 0 )
{
wait(NULL);
close(server_socket);
}
else
{
do
{
n = recvfrom(server_socket, buffer, BUF_LEN, 0,
(struct sockaddr *)&sock_info, &sockaddr_len);
}while(n > 0);
}
}
使用alarm()
设置计时器,一旦计时器到期,请使用sigaction()
处理信号。
do
{
struct sigaction s;
s.sa_handler = handler; /* Establish the signal handler */
sigemptyset(&s.sa_mask);
s.sa_flags = 0;
alarm(20); /* first set the alarm of 20s */
/* if within 20s server doesn't receive anthing, handler will be evoked */
sigaction(SIGALRM, &s, NULL); /* when timer expires, handler will be called */
n = recvfrom(server_socket, buffer, BUF_LEN, 0,
(struct sockaddr *)&sock_info, &sockaddr_len);
}while(n > 0);
调用处理程序后,中止服务器fd。
static void handler(int sig) {
/* send the SIGABRT to server process */
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.