|
|
1.1 ! root 1: /* @(#)udpd.c 1.1 88/10/12 NFS Rev 2 Testsuite */ ! 2: /* ! 3: * server for simple udp ping program. ! 4: * listens on socket for request, then echos back ! 5: * request from client. ! 6: */ ! 7: #define UDP_PORT 3457 ! 8: ! 9: #include <stdio.h> ! 10: #include <sys/types.h> ! 11: #include <sys/socket.h> ! 12: #include <netinet/in.h> ! 13: #include <netdb.h> ! 14: ! 15: main(argc, argv) ! 16: char **argv; ! 17: { ! 18: int s; /* socket */ ! 19: struct sockaddr_in addr; /* socket address */ ! 20: int ret; ! 21: int addrlen = sizeof(struct sockaddr_in); ! 22: struct hostent *hp; ! 23: char buf[BUFSIZ]; ! 24: ! 25: if ((s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) ! 26: xxit("socket"); ! 27: ! 28: addr.sin_family = AF_INET; ! 29: addr.sin_port = htons(UDP_PORT); ! 30: addr.sin_addr.s_addr = INADDR_ANY; ! 31: ! 32: if (bind(s, &addr, addrlen) < 0) ! 33: xxit("bind"); ! 34: ! 35: while(1) { ! 36: fprintf(stderr, "%s awaiting request\n", argv[0]); ! 37: addrlen = sizeof(struct sockaddr_in); ! 38: ret = recvfrom(s, buf, BUFSIZ, 0, &addr, &addrlen); ! 39: if (ret < 0) ! 40: xxit("recvfrom"); ! 41: if (hp = gethostbyaddr(&addr.sin_addr, sizeof(addr.sin_addr), ! 42: AF_INET)) ! 43: fprintf(stderr, "\ ! 44: %s: accepted request from host %s\n", argv[0], hp->h_name); ! 45: else ! 46: fprintf(stderr, "\ ! 47: %s: accepted request from host %x\n", argv[0], addr.sin_addr.s_addr); ! 48: ! 49: fprintf(stderr, " recvfrom ret %d\n", ret); ! 50: if (ret > 0) { ! 51: *buf = *buf + 1; ! 52: ret = sendto(s, buf, ret, 0, &addr, addrlen); ! 53: fprintf(stderr, " sendto ret %d\n", ret); ! 54: } ! 55: } ! 56: } ! 57: ! 58: xxit(s) ! 59: char *s; ! 60: { ! 61: perror(s); ! 62: exit(1); ! 63: } ! 64:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.