1 #include "unp.h"
2
3 #define MAXN 16384 /* max #bytes to request from server */
4
5 int
main(int argc,char ** argv)6 main(int argc, char **argv)
7 {
8 int i, j, fd, nchildren, nloops, nbytes;
9 pid_t pid;
10 ssize_t n;
11 char request[MAXLINE], reply[MAXN];
12
13 if (argc != 6)
14 err_quit("usage: client <hostname or IPaddr> <port> <#children> "
15 "<#loops/child> <#bytes/request>");
16
17 nchildren = atoi(argv[3]);
18 nloops = atoi(argv[4]);
19 nbytes = atoi(argv[5]);
20 snprintf(request, sizeof(request), "%d\n", nbytes); /* newline at end */
21
22 for (i = 0; i < nchildren; i++) {
23 if ( (pid = Fork()) == 0) { /* child */
24 for (j = 0; j < nloops; j++) {
25 fd = Tcp_connect(argv[1], argv[2]);
26
27 Write(fd, request, strlen(request));
28
29 if ( (n = Readn(fd, reply, nbytes)) != nbytes)
30 err_quit("server returned %d bytes", n);
31
32 Close(fd); /* TIME_WAIT on client, not server */
33 }
34 printf("child %d done\n", i);
35 exit(0);
36 }
37 /* parent loops around to fork() again */
38 }
39
40 while (wait(NULL) > 0) /* now parent waits for all children */
41 ;
42 if (errno != ECHILD)
43 err_sys("wait error");
44
45 exit(0);
46 }
47