static void    sig_alrm(int);

void dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
    int    n;
    char   sendline[MAXLINE], recvline[MAXLINE + 1];

    signal(SIGALRM, sig_alrm);

    while (fgets(sendline, MAXLINE, fp) != NULL) {

        sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);

        alarm(5);
        if ( (n = recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL)) < 0) {
            if (errno == EINTR)
                fprintf(stderr, "socket timeout\n");
            else
                err_sys("recvfrom error");
        } else {
            alarm(0);
            recvline[n] = 0; /* null terminate */
            fputs(recvline, stdout);
        }
    }
}

static void sig_alrm(int signo)
{
    return;                  /* just interrupt the recvfrom() */
}

 

相关文章:

  • 2021-08-24
  • 2021-10-13
  • 2022-01-19
  • 2022-12-23
  • 2022-12-23
  • 2021-12-03
  • 2022-12-23
  • 2022-01-03
猜你喜欢
  • 2022-03-08
  • 2022-12-23
  • 2022-12-23
  • 2021-06-04
  • 2022-12-23
  • 2021-09-24
  • 2021-05-31
相关资源
相似解决方案