dgcliaddr.c 670 B

1234567891011121314151617181920212223242526272829
  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. socklen_t len;
  8. struct sockaddr *preply_addr;
  9. preply_addr = Malloc(servlen);
  10. while (Fgets(sendline, MAXLINE, fp) != NULL) {
  11. Sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
  12. len = servlen;
  13. n = Recvfrom(sockfd, recvline, MAXLINE, 0, preply_addr, &len);
  14. if (len != servlen || memcmp(pservaddr, preply_addr, len) != 0) {
  15. printf("reply from %s (ignored)\n",
  16. Sock_ntop(preply_addr, len));
  17. continue;
  18. }
  19. recvline[n] = 0; /* null terminate */
  20. Fputs(recvline, stdout);
  21. }
  22. }