diff --git a/SRC/ttcp/ttcpcliserv/Makefile b/SRC/ttcp/ttcpcliserv/Makefile deleted file mode 100644 index 08ee3ce..0000000 --- a/SRC/ttcp/ttcpcliserv/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -# Change the following as required: -CC = gcc - -CFLAGS = -Wall -#CFLAGS = -ansi -Wall -Dsun -D__STDC__=0 -DMSG_EOF=0 -# My flags for gcc/solaris 2.3: -ansi -Wall -Dsun -D__STDC__=0 -# (Solaris -DMSG_EOF just to let me compile it under Solaris; it won't run) -# Add in -DGCC_STRUCT_PROBLEM for gcc versions 1.x under SunOS 4.x -# Add in -D__STDC__=0 for gcc under Solaris 2 (for Sun's screwy headers) -# Add in -D_BSD=44 for AIX 3.2.2 (see ) -# Add in -D_SOCKADDR_LEN for DEC OSF/1 (see ) - -# Following line for SVR4, Solaris 2.x; 2.5 no longer requires libucb.a. -#LIBS = ./libmisc.a /usr/ucblib/libucb.a -lsocket -lnsl - -# Following line for 4.4BSD, BSD/386, SunOS 4.x, AIX 3.2.2, OSF/1 -LIBS = ./libmisc.a - -PROGS = udpcli udpserv tcpcli tcpserv ttcpcli ttcpserv \ - ttcpclibig ttcpservbig ttcphttpcli \ - udpclitime udpservtime tcpclitime tcpservtime ttcpclitime ttcpservtime - -all: ${PROGS} - -udpcli: udpcli.o - ${CC} ${CCFLAGS} -o $@ udpcli.o ${LIBS} - -udpserv: udpserv.o - ${CC} ${CCFLAGS} -o $@ udpserv.o ${LIBS} - -tcpcli: tcpcli.o readstream.o - ${CC} ${CCFLAGS} -o $@ tcpcli.o readstream.o ${LIBS} - -tcpserv: tcpserv.o readstream.o - ${CC} ${CCFLAGS} -o $@ tcpserv.o readstream.o ${LIBS} - -ttcpcli: ttcpcli.o readstream.o - ${CC} ${CCFLAGS} -o $@ ttcpcli.o readstream.o ${LIBS} - -ttcpserv: ttcpserv.o readstream.o - ${CC} ${CCFLAGS} -o $@ ttcpserv.o readstream.o ${LIBS} - -ttcpclibig: ttcpclibig.o readstream.o - ${CC} ${CCFLAGS} -o $@ ttcpclibig.o readstream.o ${LIBS} - -ttcpservbig: ttcpservbig.o readstream.o - ${CC} ${CCFLAGS} -o $@ ttcpservbig.o readstream.o ${LIBS} - -ttcphttpcli: ttcphttpcli.o readstream.o - ${CC} ${CCFLAGS} -o $@ ttcphttpcli.o readstream.o ${LIBS} - -udpclitime: udpclitime.o timer.o - ${CC} ${CCFLAGS} -o $@ udpclitime.o timer.o ${LIBS} - -udpservtime: udpservtime.o timer.o - ${CC} ${CCFLAGS} -o $@ udpservtime.o timer.o ${LIBS} - -tcpclitime: tcpclitime.o readstream.o timer.o - ${CC} ${CCFLAGS} -o $@ tcpclitime.o readstream.o timer.o ${LIBS} - -tcpservtime: tcpservtime.o readstream.o timer.o - ${CC} ${CCFLAGS} -o $@ tcpservtime.o readstream.o timer.o ${LIBS} - -ttcpclitime: ttcpclitime.o readstream.o timer.o - ${CC} ${CCFLAGS} -o $@ ttcpclitime.o readstream.o timer.o ${LIBS} - -ttcpservtime: ttcpservtime.o readstream.o timer.o - ${CC} ${CCFLAGS} -o $@ ttcpservtime.o readstream.o timer.o ${LIBS} - -clean: - rm -f ${PROGS} core core.* *.o temp.* *.out typescript* diff --git a/SRC/ttcp/ttcpcliserv/README b/SRC/ttcp/ttcpcliserv/README deleted file mode 100644 index 401c361..0000000 --- a/SRC/ttcp/ttcpcliserv/README +++ /dev/null @@ -1,26 +0,0 @@ -The files in this archive are the example programs from Chapter 1 of -"TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and -the UNIX Domain Protocols" by W. Richard Stevens (Addison-Wesley, 1996). - -All the source code files assume tabs stop every 4 columns, not 8. With -vi I use ":set tabstop=4". - -The files with "time" in their name are versions that can be used to time -the client-server transactions (used for Figure 1.14 of the text). The -three server programs with "time" in their name also allow a command-line -option specifying how long they should sleep, to simulate the server -processing time. Also notice that these "time" clients have a doubly -nested loop: one for the request-reply size and another for the number -of iterations. - -The two T/TCP files with "big" in their name define the request and reply -size to exceed one MSS (used for the example in Section 3.6 of the text). - -*Before* trying to make these programs, do something like - - cc -c error.c sleepus.c - ar -crv libmisc.a error.o sleepus.o - ranlib libmisc.a # needed for a BSD-derived system - -Then change the definitions of CC, CFLAGS, and LIBS in the Makefile, -as appropriate for your system. Then you can "make all". diff --git a/SRC/ttcp/ttcpcliserv/cliserv.h b/SRC/ttcp/ttcpcliserv/cliserv.h deleted file mode 100644 index 3631ef6..0000000 --- a/SRC/ttcp/ttcpcliserv/cliserv.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Common includes and defines for UDP, TCP, and T/TCP - * clients and servers */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#define REQUEST 400 /* max size of request, in bytes */ -#define REPLY 400 /* max size of reply, in bytes */ - -#define UDP_SERV_PORT 7777 /* UDP server's well-known port */ -#define TCP_SERV_PORT 8888 /* TCP server's well-known port */ -#define TTCP_SERV_PORT 9999 /* T/TCP server's well-known port */ - -/* Following shortens all the type casts of pointer arguments */ -#define SA struct sockaddr * - -void err_quit(const char *, ...); -void err_sys(const char *, ...); -int read_stream(int, char *, int); - -/* following for timing versions of client-server */ -void start_timer(void); -double print_timer(void); -void sleep_us(unsigned int); - -#define min(a,b) ((a) < (b) ? (a) : (b)) diff --git a/SRC/ttcp/ttcpcliserv/error.c b/SRC/ttcp/ttcpcliserv/error.c deleted file mode 100644 index 1850d88..0000000 --- a/SRC/ttcp/ttcpcliserv/error.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include /* for definition of errno */ -#include /* ANSI C header file */ -#include /* ANSI C header file */ -#include /* ANSI C header file */ -#include /* ANSI C header file */ -#include /* ANSI C header file */ - -#define MAXLINE 4096 - -static void err_doit(int, const char *, va_list); - -/* Nonfatal error related to a system call. - * Print a message and return. */ - -void -err_ret(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - err_doit(1, fmt, ap); - va_end(ap); - return; -} - -/* Fatal error related to a system call. - * Print a message and terminate. */ - -void -err_sys(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - err_doit(1, fmt, ap); - va_end(ap); - exit(1); -} - -/* Fatal error related to a system call. - * Print a message, dump core, and terminate. */ - -void -err_dump(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - err_doit(1, fmt, ap); - va_end(ap); - abort(); /* dump core and terminate */ - exit(1); /* shouldn't get here */ -} - -/* Nonfatal error unrelated to a system call. - * Print a message and return. */ - -void -err_msg(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - err_doit(0, fmt, ap); - va_end(ap); - return; -} - -/* Fatal error unrelated to a system call. - * Print a message and terminate. */ - -void -err_quit(const char *fmt, ...) -{ - va_list ap; - - va_start(ap, fmt); - err_doit(0, fmt, ap); - va_end(ap); - exit(1); -} - -/* Print a message and return to caller. - * Caller specifies "errnoflag". */ - -static void -err_doit(int errnoflag, const char *fmt, va_list ap) -{ - int errno_save; - char buf[MAXLINE]; - - errno_save = errno; /* value caller might want printed */ - vsprintf(buf, fmt, ap); - if (errnoflag) - sprintf(buf+strlen(buf), ": %s", strerror(errno_save)); - strcat(buf, "\n"); - fflush(stdout); /* in case stdout and stderr are the same */ - fputs(buf, stderr); - fflush(stderr); /* SunOS 4.1.* doesn't grok NULL argument */ - return; -} diff --git a/SRC/ttcp/ttcpcliserv/readstream.c b/SRC/ttcp/ttcpcliserv/readstream.c deleted file mode 100644 index b9514a6..0000000 --- a/SRC/ttcp/ttcpcliserv/readstream.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -read_stream(int fd, char *ptr, int maxbytes) -{ - int nleft, nread; - - nleft = maxbytes; - while (nleft > 0) { - if ( (nread = read(fd, ptr, nleft)) < 0) - return(nread); /* error, return < 0 */ - else if (nread == 0) - break; /* EOF, return #bytes read */ - nleft -= nread; - ptr += nread; - } - return(maxbytes - nleft); /* return >= 0 */ -} diff --git a/SRC/ttcp/ttcpcliserv/sleepus.c b/SRC/ttcp/ttcpcliserv/sleepus.c deleted file mode 100644 index f38abaf..0000000 --- a/SRC/ttcp/ttcpcliserv/sleepus.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include -#include -#include -#include - -void -sleep_us(unsigned int nusecs) -{ - struct timeval tval; - - for ( ; ; ) { - tval.tv_sec = nusecs / 1000000; - tval.tv_usec = nusecs % 1000000; - if (select(0, NULL, NULL, NULL, &tval) == 0) - break; /* all OK */ - /* - * Note than on an interrupted system call (i.e, SIGIO) there's not - * much we can do, since the timeval{} isn't updated with the time - * remaining. We could obtain the clock time before the call, and - * then obtain the clock time here, subtracting them to determine - * how long select() blocked before it was interrupted, but that - * seems like too much work :-) - */ - if (errno == EINTR) - continue; - err_sys("sleep_us: select error"); - } -} diff --git a/SRC/ttcp/ttcpcliserv/tcpcli.c b/SRC/ttcp/ttcpcliserv/tcpcli.c deleted file mode 100644 index 935a25f..0000000 --- a/SRC/ttcp/ttcpcliserv/tcpcli.c +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) /* simple TCP client */ -{ - struct sockaddr_in serv; - char request[REQUEST], reply[REPLY]; - int sockfd, n; - - if (argc != 2) - err_quit("usage: tcpcli "); - - if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, 0, sizeof(serv)); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(TCP_SERV_PORT); - - if (connect(sockfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("connect error"); - - /* form request[] ... */ - - if (write(sockfd, request, REQUEST) != REQUEST) - err_sys("write error"); - if (shutdown(sockfd, 1) < 0) - err_sys("shutdown error"); - - if ( (n = read_stream(sockfd, reply, REPLY)) < 0) - err_sys("read error"); - - /* process "n" bytes of reply[] ... */ - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/tcpclitime.c b/SRC/ttcp/ttcpcliserv/tcpclitime.c deleted file mode 100644 index cf950ee..0000000 --- a/SRC/ttcp/ttcpcliserv/tcpclitime.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv; - char request[5000], reply[5000]; - int sockfd, n, len, i; - double rtt, minrtt; - - if (argc != 2) - err_quit("usage: tcpcli "); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(TCP_SERV_PORT); - - for (len = 0; len <= 1400; len += 100) { - printf("len = %d\n", len); - minrtt = 9999999; - for (i = 0; i < 30; i++) { - if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - start_timer(); - if (connect(sockfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("connect error"); - - /* form request[] ... */ - - if (write(sockfd, request, len) != len) - err_sys("write error"); - if (shutdown(sockfd, 1) < 0) - err_sys("shutdown error"); - - if ( (n = read_stream(sockfd, reply, len)) != len) - err_sys("read error, n = %d", n); - - rtt = print_timer(); - minrtt = min(minrtt, rtt); - - /* process "n" bytes of reply[] ... */ - close(sockfd); - } - printf("min rtt = %9.3f\n\n", minrtt); - } - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/tcpserv.c b/SRC/ttcp/ttcpcliserv/tcpserv.c deleted file mode 100644 index 1bc26d0..0000000 --- a/SRC/ttcp/ttcpcliserv/tcpserv.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main() /* simple TCP server */ -{ - struct sockaddr_in serv, cli; - char request[REQUEST], reply[REPLY]; - int listenfd, sockfd, n, clilen; - - if ( (listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, 0, sizeof(serv)); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(TCP_SERV_PORT); - - if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - if (listen(listenfd, SOMAXCONN) < 0) - err_sys("listen error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0) - err_sys("accept error"); - - if ( (n = read_stream(sockfd, request, REQUEST)) < 0) - err_sys("read error"); - - /* process "n" bytes of request[] and create reply[] ... */ - - if (write(sockfd, reply, REPLY) != REPLY) - err_sys("write error"); - - close(sockfd); - } -} diff --git a/SRC/ttcp/ttcpcliserv/tcpservtime.c b/SRC/ttcp/ttcpcliserv/tcpservtime.c deleted file mode 100644 index dd8703d..0000000 --- a/SRC/ttcp/ttcpcliserv/tcpservtime.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv, cli; - char request[5000], reply[5000]; - int listenfd, sockfd, n, clilen, spt; - - if (argc > 1) - spt = atoi(argv[1]); /* optional server processing time, in ms */ - else - spt = 0; - - if ( (listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(TCP_SERV_PORT); - - if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - if (listen(listenfd, SOMAXCONN) < 0) - err_sys("listen error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0) - err_sys("accept error"); - - if ( (n = read_stream(sockfd, request, sizeof(request))) < 0) - err_sys("read error"); - - /* process "n" bytes of request[] ... */ - if (spt) - sleep_us(spt * 1000); - - if (write(sockfd, reply, n) != n) - err_sys("write error"); - - close(sockfd); - } -} diff --git a/SRC/ttcp/ttcpcliserv/timer.c b/SRC/ttcp/ttcpcliserv/timer.c deleted file mode 100644 index 78c263f..0000000 --- a/SRC/ttcp/ttcpcliserv/timer.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" -#include - -void tvsub(struct timeval *, struct timeval *); - -struct timeval tvstart, tvend; - -void -start_timer() -{ - if (gettimeofday(&tvstart, NULL) < 0) - err_sys("start_timer: gettimeofday error"); -} - -double -print_timer() -{ - double triptime; - - if (gettimeofday(&tvend, NULL) < 0) - err_sys("print_timer: gettimeofday error"); - - tvsub(&tvend, &tvstart); - triptime = ((double) tvend.tv_sec) * 1000.0 + - ((double) tvend.tv_usec) / 1000.0; /* in millisec */ - printf("rtt = %9.3f ms\n", triptime); - return(triptime); -} - -/* Subtract two timeval structures: *end -= *start */ - -void -tvsub(struct timeval *end, struct timeval *start) -{ - if ((end->tv_usec -= start->tv_usec) < 0) { - --end->tv_sec; - end->tv_usec += 1000000; - } - end->tv_sec -= start->tv_sec; -} diff --git a/SRC/ttcp/ttcpcliserv/ttcpcli.c b/SRC/ttcp/ttcpcliserv/ttcpcli.c deleted file mode 100644 index d859116..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcpcli.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) /* T/TCP client */ -{ - struct sockaddr_in serv; - char request[REQUEST], reply[REPLY]; - int sockfd, n; - - if (argc != 2) - err_quit("usage: ttcpcli "); - - if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, 0, sizeof(serv)); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(TCP_SERV_PORT); - - /* form request[] ... */ - - if (sendto(sockfd, request, REQUEST, MSG_EOF, - (SA) &serv, sizeof(serv)) != REQUEST) - err_sys("sendto error"); - - if ( (n = read_stream(sockfd, reply, REPLY)) < 0) - err_sys("read error"); - - /* process "n" bytes of reply[] ... */ - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/ttcpclibig.c b/SRC/ttcp/ttcpcliserv/ttcpclibig.c deleted file mode 100644 index 732a656..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcpclibig.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" -#include - -#undef REQUEST -#undef REPLY - -#define REQUEST 3300 /* max size of request, in bytes */ -#define REPLY 3400 /* max size of reply, in bytes */ - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv; - char request[REQUEST], reply[REPLY]; - int sockfd, n; - - if (argc != 2) - err_quit("usage: ttcpcli "); - - if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - n = 1; - if (setsockopt(sockfd, SOL_SOCKET, SO_DEBUG, - (char *) &n, sizeof(n)) < 0) - err_sys("SO_DEBUG error"); - -#ifdef notdef - n = 1; - if (setsockopt(sockfd, IPPROTO_TCP, TCP_NOPUSH, - (char *) &n, sizeof(n)) < 0) - err_sys("TCP_NOPUSH error"); -#endif - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(TCP_SERV_PORT); - - /* form request[] ... */ - - if (sendto(sockfd, request, REQUEST, MSG_EOF, - (SA) &serv, sizeof(serv)) != REQUEST) - err_sys("sendto error"); - - if ( (n = read_stream(sockfd, reply, REPLY)) < 0) - err_sys("read error"); - - /* process "n" bytes of reply[] ... */ - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/ttcpclitime.c b/SRC/ttcp/ttcpcliserv/ttcpclitime.c deleted file mode 100644 index 771df50..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcpclitime.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv; - char request[5000], reply[5000]; - int sockfd, n, len, i; - double rtt, minrtt; - - if (argc != 2) - err_quit("usage: ttcpcli "); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(TTCP_SERV_PORT); - - for (len = 0; len <= 1400; len += 100) { - printf("len = %d\n", len); - minrtt = 9999999; - for (i = 0; i < 30; i++) { - if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - /* form request[] ... */ - - start_timer(); - if (sendto(sockfd, request, len, MSG_EOF, - (SA) &serv, sizeof(serv)) != len) - err_sys("sendto error"); - - if ( (n = read_stream(sockfd, reply, len)) < 0) - err_sys("read error"); - rtt = print_timer(); - minrtt = min(minrtt, rtt); - - /* process "n" bytes of reply[] ... */ - close(sockfd); - } - printf("min rtt = %9.3f\n\n", minrtt); - } - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/ttcphttpcli.c b/SRC/ttcp/ttcpcliserv/ttcphttpcli.c deleted file mode 100644 index ab87ee1..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcphttpcli.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) /* T/TCP client */ -{ - struct sockaddr_in serv; - char reply[REPLY]; - static char request[] = "GET / HTTP/1.0\n\r\n\r"; - int sockfd, n; - - if (argc != 2) - err_quit("usage: ttcpcli "); - - if ( (sockfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(80); - - /* form request[] ... */ - - if (sendto(sockfd, request, sizeof(request)-1, MSG_EOF, - (SA) &serv, sizeof(serv)) != sizeof(request)-1) - err_sys("sendto error"); - - while ( (n = read_stream(sockfd, reply, REPLY)) > 0) { - /* process "n" bytes of reply[] ... */ - write(1, reply, n); - } - if (n < 0) - err_sys("read error"); - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/ttcpserv.c b/SRC/ttcp/ttcpcliserv/ttcpserv.c deleted file mode 100644 index c86a9be..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcpserv.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main() /* T/TCP server */ -{ - struct sockaddr_in serv, cli; - char request[REQUEST], reply[REPLY]; - int listenfd, sockfd, n, clilen; - - if ( (listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, 0, sizeof(serv)); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(TCP_SERV_PORT); - - if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - if (listen(listenfd, SOMAXCONN) < 0) - err_sys("listen error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0) - err_sys("accept error"); - - if ( (n = read_stream(sockfd, request, REQUEST)) < 0) - err_sys("read error"); - - /* process "n" bytes of request[] and create reply[] ... */ - - if (send(sockfd, reply, REPLY, MSG_EOF) != REPLY) - err_sys("send error"); - - close(sockfd); - } -} diff --git a/SRC/ttcp/ttcpcliserv/ttcpservbig.c b/SRC/ttcp/ttcpcliserv/ttcpservbig.c deleted file mode 100644 index a03b9ed..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcpservbig.c +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -#undef REQUEST -#undef REPLY - -#define REQUEST 3300 /* max size of request, in bytes */ -#define REPLY 3400 /* max size of reply, in bytes */ - -int -main() -{ - struct sockaddr_in serv, cli; - char request[REQUEST], reply[REPLY]; - int listenfd, sockfd, n, clilen; - - if ( (listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(TCP_SERV_PORT); - - if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - if (listen(listenfd, SOMAXCONN) < 0) - err_sys("listen error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0) - err_sys("accept error"); - - if ( (n = read_stream(sockfd, request, REQUEST)) < 0) - err_sys("read error"); - - /* process "n" bytes of request[] ... */ - - if (sendto(sockfd, reply, REPLY, MSG_EOF, (SA) NULL, 0) != REPLY) - err_sys("sendto error"); - - close(sockfd); - } -} diff --git a/SRC/ttcp/ttcpcliserv/ttcpservtime.c b/SRC/ttcp/ttcpcliserv/ttcpservtime.c deleted file mode 100644 index 3e186b5..0000000 --- a/SRC/ttcp/ttcpcliserv/ttcpservtime.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv, cli; - char request[5000], reply[5000]; - int listenfd, sockfd, n, clilen, spt; - - if (argc > 1) - spt = atoi(argv[1]); /* optional server processing time, in ms */ - else - spt = 0; - - if ( (listenfd = socket(PF_INET, SOCK_STREAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(TTCP_SERV_PORT); - - if (bind(listenfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - if (listen(listenfd, SOMAXCONN) < 0) - err_sys("listen error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (sockfd = accept(listenfd, (SA) &cli, &clilen)) < 0) - err_sys("accept error"); - - if ( (n = read_stream(sockfd, request, sizeof(request))) < 0) - err_sys("read error"); - - /* process "n" bytes of request[] ... */ - if (spt) - sleep_us(spt * 1000); - - if (sendto(sockfd, reply, n, MSG_EOF, (SA) NULL, 0) != n) - err_sys("sendto error"); - - close(sockfd); - } -} diff --git a/SRC/ttcp/ttcpcliserv/udpcli.c b/SRC/ttcp/ttcpcliserv/udpcli.c deleted file mode 100644 index 7256804..0000000 --- a/SRC/ttcp/ttcpcliserv/udpcli.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) /* simple UDP client */ -{ - struct sockaddr_in serv; - char request[REQUEST], reply[REPLY]; - int sockfd, n; - - if (argc != 2) - err_quit("usage: udpcli "); - - if ( (sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, 0, sizeof(serv)); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(UDP_SERV_PORT); - - /* form request[] ... */ - - if (sendto(sockfd, request, REQUEST, 0, - (SA) &serv, sizeof(serv)) != REQUEST) - err_sys("sendto error"); - - if ( (n = recvfrom(sockfd, reply, REPLY, 0, - (SA) NULL, (int *) NULL)) < 0) - err_sys("recvfrom error"); - - /* process "n" bytes of reply[] ... */ - - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/udpclitime.c b/SRC/ttcp/ttcpcliserv/udpclitime.c deleted file mode 100644 index c6d8a0f..0000000 --- a/SRC/ttcp/ttcpcliserv/udpclitime.c +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv; - char request[5000], reply[5000]; - int sockfd, n, len, i; - double rtt, minrtt; - - if (argc != 2) - err_quit("usage: udpcli "); - - if ( (sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = inet_addr(argv[1]); - serv.sin_port = htons(UDP_SERV_PORT); - - /* form request[] ... */ - - for (len = 0; len <= 1400; len += 100) { /* len = amount of user data */ - printf("len = %d\n", len); - minrtt = 9999999; - for (i = 0; i < 30; i++) { - start_timer(); - - if (sendto(sockfd, request, len, 0, - (SA) &serv, sizeof(serv)) != len) - err_sys("sendto error"); - - if ( (n = recvfrom(sockfd, reply, sizeof(reply), 0, - (SA) NULL, (int *) NULL)) != len) - err_sys("recvfrom error"); - - rtt = print_timer(); - minrtt = min(minrtt, rtt); - - /* process "n" bytes of reply[] ... */ - } - printf("min rtt = %9.3f\n\n", minrtt); - } - exit(0); -} diff --git a/SRC/ttcp/ttcpcliserv/udpserv.c b/SRC/ttcp/ttcpcliserv/udpserv.c deleted file mode 100644 index 45d8452..0000000 --- a/SRC/ttcp/ttcpcliserv/udpserv.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main() /* simple UDP server */ -{ - struct sockaddr_in serv, cli; - char request[REQUEST], reply[REPLY]; - int sockfd, n, clilen; - - if ( (sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, 0, sizeof(serv)); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(UDP_SERV_PORT); - - if (bind(sockfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (n = recvfrom(sockfd, request, REQUEST, 0, - (SA) &cli, &clilen)) < 0) - err_sys("recvfrom error"); - - /* process "n" bytes of request[] and create reply[] ... */ - - if (sendto(sockfd, reply, REPLY, 0, - (SA) &cli, sizeof(cli)) != REPLY) - err_sys("sendto error"); - } -} diff --git a/SRC/ttcp/ttcpcliserv/udpservtime.c b/SRC/ttcp/ttcpcliserv/udpservtime.c deleted file mode 100644 index 70b5f59..0000000 --- a/SRC/ttcp/ttcpcliserv/udpservtime.c +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 1996 W. Richard Stevens. All rights reserved. - * Permission to use or modify this software and its documentation only for - * educational purposes and without fee is hereby granted, provided that - * the above copyright notice appear in all copies. The author makes no - * representations about the suitability of this software for any purpose. - * It is provided "as is" without express or implied warranty. - */ - -#include "cliserv.h" - -int -main(int argc, char *argv[]) -{ - struct sockaddr_in serv, cli; - char request[5000], reply[5000]; - int sockfd, n, clilen, spt; - - if (argc > 1) - spt = atoi(argv[1]); /* optional server processing time, in ms */ - else - spt = 0; - - if ( (sockfd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) - err_sys("socket error"); - - memset(&serv, sizeof(serv), 0); - serv.sin_family = AF_INET; - serv.sin_addr.s_addr = htonl(INADDR_ANY); - serv.sin_port = htons(UDP_SERV_PORT); - - if (bind(sockfd, (SA) &serv, sizeof(serv)) < 0) - err_sys("bind error"); - - for ( ; ; ) { - clilen = sizeof(cli); - if ( (n = recvfrom(sockfd, request, sizeof(request), 0, - (SA) &cli, &clilen)) < 0) - err_sys("recvfrom error"); - - /* process "n" bytes of request[] ... */ - if (spt) - sleep_us(spt * 1000); - - if (sendto(sockfd, reply, n, 0, - (SA) &cli, sizeof(cli)) != n) - err_sys("sendto error"); - } -}