FreeCalypso > hg > themwi-system-sw
annotate utils/tcpserv-dump.c @ 215:67289fac8a44
utils: new program tcpserv-dump
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 24 Jul 2023 21:49:09 -0800 |
parents | utils/sip-udp-dump.c@5995660dcbac |
children | 6aa2cd650943 |
rev | line source |
---|---|
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
2 * This debug utility binds to a TCP port specified on the command line, |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
3 * accepts incoming TCP connections and reads any bytes sent by a client |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
4 * on an opened connection - but never sends anything back. A log file |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
5 * is written, recording all received connections and bytes. |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 */ |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <sys/types.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include <sys/socket.h> |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
10 #include <sys/time.h> |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
11 #include <sys/errno.h> |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <netinet/in.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include <arpa/inet.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <stdio.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <stdlib.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <string.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <strings.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 #include <time.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 #include <unistd.h> |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
21 #define MAXCONN 10 |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
22 |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
23 static int tcp_port; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
24 static int listener, nconn, conns[MAXCONN], max_fd; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 static FILE *logf; |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
26 static struct timeval curtime; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
27 static char fmt_time[32]; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 static void |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
30 format_time() |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 { |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
32 struct tm *tm; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
33 |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
34 tm = gmtime(&curtime.tv_sec); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
35 sprintf(fmt_time, "%d-%02d-%02dT%02d:%02d:%02dZ", |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
36 tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
37 tm->tm_hour, tm->tm_min, tm->tm_sec); |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 } |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 static void |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
41 handle_accept(newfd, sin) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
42 struct sockaddr_in *sin; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 { |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
44 fprintf(logf, "\n%s Accept conn from %s:%u fd %d\n", fmt_time, |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
45 inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), newfd); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
46 if (nconn < MAXCONN) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
47 conns[nconn] = newfd; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
48 nconn++; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
49 if (newfd > max_fd) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
50 max_fd = newfd; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
51 } else { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
52 fprintf(logf, "MAXCONN exceeded, closing new fd\n"); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
53 close(newfd); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
54 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
55 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
56 |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
57 static int |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
58 handle_conn_fd(fd) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
59 { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
60 u_char buf[512]; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
61 int cc, off, chunk, i, c; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
63 cc = read(fd, buf, sizeof buf); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
64 fprintf(logf, "\n%s fd %d read %d\n", fmt_time, fd, cc); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
65 if (cc <= 0) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
66 fprintf(logf, "closing fd\n"); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
67 return(1); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
68 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
69 for (off = 0; off < cc; off += chunk) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
70 fprintf(logf, "%04X: ", off); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
71 chunk = cc - off; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
72 if (chunk > 16) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
73 chunk = 16; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
74 for (i = 0; i < 16; i++) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
75 if (i < chunk) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
76 fprintf(logf, "%02X ", buf[off + i]); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
77 else |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
78 fputs(" ", logf); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
79 if (i == 7 || i == 15) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
80 putc(' ', logf); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
81 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
82 for (i = 0; i < chunk; i++) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
83 c = buf[off + i]; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
84 if (c < ' ' || c > '~') |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
85 c = '.'; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
86 putc(c, logf); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
87 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
88 putc('\n', logf); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
89 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
90 return(0); |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 } |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 main(argc, argv) |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 char **argv; |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 { |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
96 int max_fd, rc, i; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
97 struct sockaddr_in sin; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 socklen_t addrlen; |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
99 fd_set fds; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
101 if (argc != 3) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
102 fprintf(stderr, "usage: %s port logfile\n", argv[0]); |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 exit(1); |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 } |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
105 tcp_port = atoi(argv[1]); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
106 listener = socket(AF_INET, SOCK_STREAM, 0); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
107 if (listener < 0) { |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 perror("socket"); |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 exit(1); |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 } |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 sin.sin_family = AF_INET; |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 sin.sin_addr.s_addr = INADDR_ANY; |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
113 sin.sin_port = htons(tcp_port); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
114 rc = bind(listener, (struct sockaddr *) &sin, sizeof sin); |
43
5995660dcbac
sip-rx-test, sip-udp-dump: fix bind error handling
Mychaela Falconia <falcon@freecalypso.org>
parents:
18
diff
changeset
|
115 if (rc < 0) { |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 perror("bind"); |
43
5995660dcbac
sip-rx-test, sip-udp-dump: fix bind error handling
Mychaela Falconia <falcon@freecalypso.org>
parents:
18
diff
changeset
|
117 exit(1); |
5995660dcbac
sip-rx-test, sip-udp-dump: fix bind error handling
Mychaela Falconia <falcon@freecalypso.org>
parents:
18
diff
changeset
|
118 } |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
119 logf = fopen(argv[2], "a"); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
120 if (!logf) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
121 perror(argv[2]); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
122 exit(1); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
123 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
124 rc = listen(listener, 5); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
125 if (rc < 0) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
126 perror("listen"); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
127 exit(1); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
128 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
129 gettimeofday(&curtime, 0); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
130 format_time(); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
131 fprintf(logf, "\n%s Test server started\n", fmt_time); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
132 fflush(logf); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
133 nconn = 0; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
134 max_fd = listener; |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 for (;;) { |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
136 FD_ZERO(&fds); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
137 FD_SET(listener, &fds); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
138 for (i = 0; i < nconn; i++) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
139 FD_SET(conns[i], &fds); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
140 rc = select(max_fd+1, &fds, 0, 0, 0); |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 if (rc < 0) { |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
142 if (errno == EINTR) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
143 continue; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
144 perror("select"); |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 exit(1); |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 } |
215
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
147 gettimeofday(&curtime, 0); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
148 format_time(); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
149 for (i = 0; i < nconn; ) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
150 if (!FD_ISSET(conns[i], &fds)) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
151 i++; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
152 continue; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
153 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
154 if (handle_conn_fd(conns[i])) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
155 close(conns[i]); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
156 nconn--; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
157 conns[i] = conns[nconn]; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
158 } else |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
159 i++; |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
160 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
161 if (FD_ISSET(listener, &fds)) { |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
162 addrlen = sizeof(struct sockaddr_in); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
163 rc = accept(listener, (struct sockaddr *) &sin, |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
164 &addrlen); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
165 if (rc >= 0) |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
166 handle_accept(rc, &sin); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
167 else |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
168 fprintf(logf, "\n%s accept syscall error!\n", |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
169 fmt_time); |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
170 } |
67289fac8a44
utils: new program tcpserv-dump
Mychaela Falconia <falcon@freecalypso.org>
parents:
43
diff
changeset
|
171 fflush(logf); |
17
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 } |
4e0a73be9e37
sip-udp-dump utility written, compiles
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 } |