繁体   English   中英

如何使用SIGALRM中止服务器连接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM