dgclitimeo2.c 669 B

12345678910111213141516171819202122232425262728293031
  1. #include "unp.h"
  2. void
  3. dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
  4. {
  5. int n;
  6. char sendline[MAXLINE], recvline[MAXLINE + 1];
  7. struct timeval tv;
  8. tv.tv_sec = 5;
  9. tv.tv_usec = 0;
  10. Setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
  11. while (Fgets(sendline, MAXLINE, fp) != NULL) {
  12. Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
  13. n = recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
  14. if (n < 0) {
  15. if (errno == EWOULDBLOCK) {
  16. fprintf(stderr, "socket timeout\n");
  17. continue;
  18. } else
  19. err_sys("recvfrom error");
  20. }
  21. recvline[n] = 0; /* null terminate */
  22. Fputs(recvline, stdout);
  23. }
  24. }