|
|
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.