ping_v4.c 644 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "ping.h"
  2. void
  3. ping_v4(struct hostent *hptr)
  4. {
  5. int size;
  6. char recvbuf[BUFSIZE];
  7. socklen_t len;
  8. ssize_t n;
  9. struct timeval tval;
  10. setuid(getuid()); /* don't need special permissions any more */
  11. size = 60 * 1024; /* OK if setsockopt fails */
  12. setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
  13. sig_alrm(SIGALRM); /* send first packet */
  14. for ( ; ; ) {
  15. len = salen;
  16. n = recvfrom(sockfd, recvbuf, sizeof(recvbuf), 0, sarecv, &len);
  17. if (n < 0) {
  18. if (errno == EINTR)
  19. continue;
  20. else
  21. err_sys("recvfrom error");
  22. }
  23. Gettimeofday(&tval, NULL);
  24. (*fptrs.proc_f)(recvbuf, n, &tval);
  25. }
  26. }