1
2 /*#ifdef __sun*/
3 /* XXX */
4 #if 1
5
6 int
main()7 main() {
8 puts("-lnsl!");
9 puts("-lsocket!!");
10 puts("-lresolv!!!");
11 puts("-lol!!!!!!!!!!!!!!!!!!!!!!!!!!!");
12 }
13
14 #else
15
16 #include <sys/types.h>
17 #include <sys/socket.h>
18 #include <netinet/in.h>
19 #include <arpa/inet.h>
20 #include <netdb.h>
21 #include <unistd.h>
22 #include <signal.h>
23
24 static void
client()25 client() {
26 struct sockaddr_in sa;
27 char buf[1024];
28 int tries = 0;
29 int s;
30 int rc;
31 int bytes_read = 0;
32
33 if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
34 perror("socket");
35 return;
36 }
37 sa.sin_family = AF_INET;
38 sa.sin_port = htons(9991);
39 sa.sin_addr.s_addr = inet_addr("127.0.0.1");
40
41 do {
42 if (connect(s, (struct sockaddr *)&sa, sizeof sa) == -1) {
43 sched_yield();
44 } else {
45 break;
46 }
47 } while (++tries < 10);
48
49 while ((rc = recv(s, buf, sizeof buf, 0)) > 0) {
50 bytes_read += rc;
51 }
52 printf("%d\n", bytes_read);
53 }
54
55 static void
server()56 server() {
57 int s, s2;
58 struct sockaddr_in sa;
59 int salen;
60 int i;
61 char buf[1024];
62
63 memset(buf, 'x', sizeof buf);
64 if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
65 perror("socket");
66 return;
67 }
68
69 sa.sin_addr.s_addr = INADDR_ANY;
70 sa.sin_family = AF_INET;
71 sa.sin_port = htons(9991);
72 salen = 1;
73 (void) setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &salen, sizeof(int));
74 salen = sizeof sa;
75 if (bind(s, (struct sockaddr *)&sa, salen) == -1) {
76 perror("bind");
77 return;
78 }
79 if (listen(s, 1) == -1) {
80 perror("listen");
81 return;
82 }
83 s2 = accept(s, (struct sockaddr *)&sa, &salen);
84 if (s2 == -1) {
85 perror("accept");
86 return;
87 }
88
89 (void) signal(SIGPIPE, SIG_IGN);
90 for (i = 0; i < 128; ++i) {
91 (void) send(s2, buf, sizeof buf, 0);
92 }
93 }
94
95 int
main()96 main() {
97 struct sockaddr_in sa;
98
99
100 switch (fork()) {
101 case -1:
102 perror("fork");
103 break;
104 case 0:
105 server();
106 _exit(0);
107 break;
108 default:
109 client();
110 (void) wait(NULL);
111 }
112 }
113
114 #endif
115
116