diff options
author | Martin Peach <mrpeach@users.sourceforge.net> | 2010-03-27 15:58:59 +0000 |
---|---|---|
committer | Martin Peach <mrpeach@users.sourceforge.net> | 2010-03-27 15:58:59 +0000 |
commit | 49118ee4d97b13d4dbe076c45c5f762698a496ab (patch) | |
tree | 08d1dedfdf51d7162960926f55dcf2873011c51f /net | |
parent | a84d0bd1965c0b1ce7d9b9d9803cc6b734d33bcb (diff) |
Added output of IP address of disconnecting client at suggestion of Ivica Ico Bukvic ico@vt.edu.
Removed send timeout message since each send is in its own thread and won't cause trouble if it hangs...
svn path=/trunk/externals/mrpeach/; revision=13292
Diffstat (limited to 'net')
-rw-r--r-- | net/tcpserver-help.pd | 371 | ||||
-rw-r--r-- | net/tcpserver.c | 87 |
2 files changed, 198 insertions, 260 deletions
diff --git a/net/tcpserver-help.pd b/net/tcpserver-help.pd index a717552..b468492 100644 --- a/net/tcpserver-help.pd +++ b/net/tcpserver-help.pd @@ -1,187 +1,184 @@ -#N canvas 0 36 1463 779 12; -#X msg 13 -36 print; -#X floatatom 344 316 5 0 0 0 - - -; -#X floatatom 368 366 5 0 0 0 - - -; -#X obj 392 317 unpack 0 0 0 0; -#X floatatom 392 340 3 0 0 0 - - -; -#X floatatom 423 340 3 0 0 0 - - -; -#X floatatom 455 340 3 0 0 0 - - -; -#X floatatom 489 340 3 0 0 0 - - -; -#X text 349 339 from; -#X text 260 316 connections; -#X obj 321 441 print received; -#X msg 109 60 client 1 1 2 3; -#X msg 37 -12 broadcast 1 2 3; -#X text 65 -35 list of connections; -#X text 160 -12 send to all clients; -#X text 298 366 on socket; -#X msg -37 -86 send 504 1 2 3; -#X text 74 -91 send to client on socket 504; -#X msg 647 -209 client 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 -18 19; -#X msg 647 -186 client 1 20 21 22 23 24 25 26 27 28 29 30 31 32 33 -34 35 36 37 38 39; -#X msg 647 -148 client 1 40 41 42 43 44 45 46 47 48 49 50 51 52 53 -54 55 56 57 58 59; -#X msg 647 -110 client 1 60 61 62 63 64 65 66 67 68 69 70 71 72 73 -74 75 76 77 78 79; -#X msg 647 -72 client 1 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 -95 96 97 98 99; -#X msg 647 -34 client 1 100 101 102 103 104 105 106 107 108 109 110 -111 112 113 114 115 116 117 118 119; -#X msg 647 4 client 1 120 121 122 123 124 125 126 127 138 139 140 141 -142 143 144 145 146 147 148 149; -#X msg 647 42 client 1 150 151 152 153 154 155 156 157 158 159 160 -161 162 163 164 165 166 167 168 169; -#X msg 647 80 client 1 170 171 172 173 174 175 176 177 178 179 180 -181 182 183 184 185 186 187 188 189; -#X msg 647 118 client 1 190 191 192 193 194 195 196 197 198 199 200 -201 202 203 204 205 206 207 208 209; -#X msg 647 156 client 1 210 211 212 213 214 215 216 217 218 219 220 -221 222 223 224 225 226 227 228 229; -#X msg 647 194 client 1 230 231 232 233 234 235 236 237 238 239 240 -241 242 243 244 245 246 247 248 249; -#X msg 647 232 client 1 250 251 252 253 254 255; -#X obj 14 -203 openpanel; -#X obj 14 -222 bng 15 250 50 0 empty empty choose_a_file 17 7 0 10 --24198 -241291 -1; -#X text -2 -183 ...any file; -#X msg -134 -183 client 1 \$1; -#X msg -12 -61 10 1 2 43; -#X text 72 -74 'send' prefix is optional; -#X text 62 -57 (the first number is socket number); -#X msg -67 -116 disconnectsocket \$1; -#X msg -110 -159 disconnectclient \$1; -#X obj 647 257 s toserver; -#X obj 321 264 r toserver; -#X floatatom 117 -198 5 0 0 0 - - -; -#X obj 95 -179 f; -#X obj 95 -198 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 --241291 -1; -#X floatatom 159 -155 5 0 0 0 - - -; -#X obj 137 -136 f; -#X obj 137 -155 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 --241291 -1; -#X text -135 -136 disconnect by socket or client number; -#X text 428 291 argument is port number; -#X text -8 293 Received messages are output as lists of bytes; -#X text -69 397 ***WARNING*** Attempting to print long messages can -hang pd!; -#X obj 321 419 spigot; -#X obj 360 399 tgl 15 0 empty empty enable_print 17 7 0 10 -24198 -258699 --45076 0 1; -#X msg 133 84 dump \$1; -#X obj -43 69 tgl 15 0 empty empty enable_dump 17 7 0 10 -4034 -257985 --1 0 1; -#X text -111 19 dump received; -#X text -111 35 characters to main; -#X text -111 50 window in hexdump; -#X text -111 66 format:; -#X obj 321 292 tcpserver 9997; -#X msg -158 -207 client 1 test.txt; -#X text 647 -234 [tcpserver] sends and receives bytes on [0...255] -; -#X text 132 -243 [tcpserver] waits for clients to connect to its port. -; -#X text -163 -228 send a file to client 1; -#X msg 157 108 client 1 72 101 108 108 111 13 10; -#X floatatom 578 377 9 0 0 0 - - -; -#X obj 710 336 print status; -#X floatatom 538 400 5 0 0 0 - - -; -#X text 468 399 to_client; -#X msg 85 36 client; -#X msg 62 13 client 1; -#X text 130 12 get state of client 1; -#X text 223 60 send (binary) 1 2 3 to client 1; -#X floatatom 712 469 5 0 0 0 - - -; -#X symbolatom 744 442 20 0 0 0 - - -; -#X floatatom 681 442 5 0 0 0 - - -; -#X text 645 376 bytes; -#X text 538 376 sent; -#X msg 183 134 clientbuf 1 65536; -#X obj 681 418 unpack 0 0 s 0; -#X floatatom 776 490 7 0 0 0 - - -; -#X text 621 490 length of send buffer:; -#X text 661 468 socket:; -#X text 630 441 client:; -#X text 721 441 ip:; -#X text 313 133 set send-buffer size for client 1; -#X text 137 36 get state of all clients (list on right outlet); -#X obj 538 351 unpack 0 0 0; -#X floatatom 619 418 5 0 0 0 - - -; -#X text 549 417 on_socket; -#X msg 233 184 send; -#X msg 258 209 1156; -#X text 276 183 output 'client' message for all sockets; -#X text 298 209 output 'client' message for socket 1156; -#X msg 208 159 timeout 100; -#X text 295 159 microsecond timeout for send (default is 1000); -#X msg 283 234 unblock; -#X obj 538 312 route sent client blocked; -#X text -143 233 If sending too many messages blocks the system \, -tcpserver will stop sending until it receives an unblock message; -#X text -69 476 2010/03/24 Martin Peach; -#X obj 652 359 print blocked; -#X connect 0 0 60 0; -#X connect 3 0 4 0; -#X connect 3 1 5 0; -#X connect 3 2 6 0; -#X connect 3 3 7 0; -#X connect 11 0 60 0; -#X connect 12 0 60 0; -#X connect 16 0 60 0; -#X connect 18 0 40 0; -#X connect 19 0 40 0; -#X connect 20 0 40 0; -#X connect 21 0 40 0; -#X connect 22 0 40 0; -#X connect 23 0 40 0; -#X connect 24 0 40 0; -#X connect 25 0 40 0; -#X connect 26 0 40 0; -#X connect 27 0 40 0; -#X connect 28 0 40 0; -#X connect 29 0 40 0; -#X connect 30 0 40 0; -#X connect 31 0 34 0; -#X connect 32 0 31 0; -#X connect 34 0 60 0; -#X connect 35 0 60 0; -#X connect 38 0 60 0; -#X connect 39 0 60 0; -#X connect 41 0 60 0; -#X connect 42 0 43 1; -#X connect 43 0 39 0; -#X connect 44 0 43 0; -#X connect 45 0 46 1; -#X connect 46 0 38 0; -#X connect 47 0 46 0; -#X connect 52 0 10 0; -#X connect 53 0 52 1; -#X connect 54 0 60 0; -#X connect 55 0 54 0; -#X connect 60 0 52 0; -#X connect 60 1 1 0; -#X connect 60 2 2 0; -#X connect 60 3 3 0; -#X connect 60 4 98 0; -#X connect 61 0 60 0; -#X connect 65 0 60 0; -#X connect 70 0 60 0; -#X connect 71 0 60 0; -#X connect 79 0 60 0; -#X connect 80 0 76 0; -#X connect 80 1 74 0; -#X connect 80 2 75 0; -#X connect 80 3 81 0; -#X connect 88 0 68 0; -#X connect 88 1 66 0; -#X connect 88 2 89 0; -#X connect 91 0 60 0; -#X connect 92 0 60 0; -#X connect 95 0 60 0; -#X connect 97 0 60 0; -#X connect 98 0 88 0; -#X connect 98 1 80 0; -#X connect 98 2 101 0; -#X connect 98 3 67 0; +#N canvas 485 23 1284 779 12;
+#X msg 39 -10 print;
+#X floatatom 344 316 5 0 0 0 - - -;
+#X floatatom 368 366 5 0 0 0 - - -;
+#X obj 392 317 unpack 0 0 0 0;
+#X floatatom 392 340 3 0 0 0 - - -;
+#X floatatom 423 340 3 0 0 0 - - -;
+#X floatatom 455 340 3 0 0 0 - - -;
+#X floatatom 489 340 3 0 0 0 - - -;
+#X text 349 339 from;
+#X text 260 316 connections;
+#X obj 321 441 print received;
+#X msg 135 86 client 1 1 2 3;
+#X msg 63 14 broadcast 1 2 3;
+#X text 91 -9 list of connections;
+#X text 186 14 send to all clients;
+#X text 298 366 on socket;
+#X msg -11 -60 send 504 1 2 3;
+#X text 100 -65 send to client on socket 504;
+#X msg 647 -209 client 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
+18 19;
+#X msg 647 -186 client 1 20 21 22 23 24 25 26 27 28 29 30 31 32 33
+34 35 36 37 38 39;
+#X msg 647 -148 client 1 40 41 42 43 44 45 46 47 48 49 50 51 52 53
+54 55 56 57 58 59;
+#X msg 647 -110 client 1 60 61 62 63 64 65 66 67 68 69 70 71 72 73
+74 75 76 77 78 79;
+#X msg 647 -72 client 1 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
+95 96 97 98 99;
+#X msg 647 -34 client 1 100 101 102 103 104 105 106 107 108 109 110
+111 112 113 114 115 116 117 118 119;
+#X msg 647 4 client 1 120 121 122 123 124 125 126 127 138 139 140 141
+142 143 144 145 146 147 148 149;
+#X msg 647 42 client 1 150 151 152 153 154 155 156 157 158 159 160
+161 162 163 164 165 166 167 168 169;
+#X msg 647 80 client 1 170 171 172 173 174 175 176 177 178 179 180
+181 182 183 184 185 186 187 188 189;
+#X msg 647 118 client 1 190 191 192 193 194 195 196 197 198 199 200
+201 202 203 204 205 206 207 208 209;
+#X msg 647 156 client 1 210 211 212 213 214 215 216 217 218 219 220
+221 222 223 224 225 226 227 228 229;
+#X msg 647 194 client 1 230 231 232 233 234 235 236 237 238 239 240
+241 242 243 244 245 246 247 248 249;
+#X msg 647 232 client 1 250 251 252 253 254 255;
+#X obj 40 -177 openpanel;
+#X obj 40 -196 bng 15 250 50 0 empty empty choose_a_file 17 7 0 10
+-24198 -241291 -1;
+#X text 24 -157 ...any file;
+#X msg -108 -157 client 1 \$1;
+#X msg 14 -35 10 1 2 43;
+#X text 98 -48 'send' prefix is optional;
+#X text 88 -31 (the first number is socket number);
+#X msg -41 -90 disconnectsocket \$1;
+#X msg -84 -133 disconnectclient \$1;
+#X obj 647 257 s toserver;
+#X obj 321 264 r toserver;
+#X floatatom 143 -172 5 0 0 0 - - -;
+#X obj 121 -153 f;
+#X obj 121 -172 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699
+-241291 -1;
+#X floatatom 185 -129 5 0 0 0 - - -;
+#X obj 163 -110 f;
+#X obj 163 -129 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699
+-241291 -1;
+#X text -109 -110 disconnect by socket or client number;
+#X text 428 291 argument is port number;
+#X text -8 293 Received messages are output as lists of bytes;
+#X text -69 397 ***WARNING*** Attempting to print long messages can
+hang pd!;
+#X obj 321 419 spigot;
+#X obj 360 399 tgl 15 0 empty empty enable_print 17 7 0 10 -24198 -258699
+-45076 0 1;
+#X msg 159 110 dump \$1;
+#X obj -17 95 tgl 15 0 empty empty enable_dump 17 7 0 10 -4034 -257985
+-1 0 1;
+#X text -85 45 dump received;
+#X text -85 61 characters to main;
+#X text -85 76 window in hexdump;
+#X text -85 92 format:;
+#X obj 321 292 tcpserver 9997;
+#X msg -132 -181 client 1 test.txt;
+#X text 647 -234 [tcpserver] sends and receives bytes on [0...255]
+;
+#X text 158 -217 [tcpserver] waits for clients to connect to its port.
+;
+#X text -137 -202 send a file to client 1;
+#X msg 183 134 client 1 72 101 108 108 111 13 10;
+#X floatatom 578 377 9 0 0 0 - - -;
+#X obj 710 336 print status;
+#X floatatom 538 400 5 0 0 0 - - -;
+#X text 468 399 to_client;
+#X msg 111 62 client;
+#X msg 88 39 client 1;
+#X text 156 38 get state of client 1;
+#X text 249 86 send (binary) 1 2 3 to client 1;
+#X floatatom 712 469 5 0 0 0 - - -;
+#X symbolatom 744 442 20 0 0 0 - - -;
+#X floatatom 681 442 5 0 0 0 - - -;
+#X text 645 376 bytes;
+#X text 538 376 sent;
+#X msg 209 160 clientbuf 1 65536;
+#X obj 681 418 unpack 0 0 s 0;
+#X floatatom 776 490 7 0 0 0 - - -;
+#X text 621 490 length of send buffer:;
+#X text 661 468 socket:;
+#X text 630 441 client:;
+#X text 721 441 ip:;
+#X text 339 159 set send-buffer size for client 1;
+#X text 163 62 get state of all clients (list on right outlet);
+#X obj 538 351 unpack 0 0 0;
+#X floatatom 619 418 5 0 0 0 - - -;
+#X text 549 417 on_socket;
+#X msg 233 184 send;
+#X msg 258 209 1156;
+#X text 276 183 output 'client' message for all sockets;
+#X text 298 209 output 'client' message for socket 1156;
+#X msg 283 234 unblock;
+#X obj 538 312 route sent client blocked;
+#X text -143 233 If sending too many messages blocks the system \,
+tcpserver will stop sending until it receives an unblock message;
+#X obj 652 359 print blocked;
+#X text -69 476 2010/03/27 Martin Peach;
+#X connect 0 0 60 0;
+#X connect 3 0 4 0;
+#X connect 3 1 5 0;
+#X connect 3 2 6 0;
+#X connect 3 3 7 0;
+#X connect 11 0 60 0;
+#X connect 12 0 60 0;
+#X connect 16 0 60 0;
+#X connect 18 0 40 0;
+#X connect 19 0 40 0;
+#X connect 20 0 40 0;
+#X connect 21 0 40 0;
+#X connect 22 0 40 0;
+#X connect 23 0 40 0;
+#X connect 24 0 40 0;
+#X connect 25 0 40 0;
+#X connect 26 0 40 0;
+#X connect 27 0 40 0;
+#X connect 28 0 40 0;
+#X connect 29 0 40 0;
+#X connect 30 0 40 0;
+#X connect 31 0 34 0;
+#X connect 32 0 31 0;
+#X connect 34 0 60 0;
+#X connect 35 0 60 0;
+#X connect 38 0 60 0;
+#X connect 39 0 60 0;
+#X connect 41 0 60 0;
+#X connect 42 0 43 1;
+#X connect 43 0 39 0;
+#X connect 44 0 43 0;
+#X connect 45 0 46 1;
+#X connect 46 0 38 0;
+#X connect 47 0 46 0;
+#X connect 52 0 10 0;
+#X connect 53 0 52 1;
+#X connect 54 0 60 0;
+#X connect 55 0 54 0;
+#X connect 60 0 52 0;
+#X connect 60 1 1 0;
+#X connect 60 2 2 0;
+#X connect 60 3 3 0;
+#X connect 60 4 96 0;
+#X connect 61 0 60 0;
+#X connect 65 0 60 0;
+#X connect 70 0 60 0;
+#X connect 71 0 60 0;
+#X connect 79 0 60 0;
+#X connect 80 0 76 0;
+#X connect 80 1 74 0;
+#X connect 80 2 75 0;
+#X connect 80 3 81 0;
+#X connect 88 0 68 0;
+#X connect 88 1 66 0;
+#X connect 88 2 89 0;
+#X connect 91 0 60 0;
+#X connect 92 0 60 0;
+#X connect 95 0 60 0;
+#X connect 96 0 88 0;
+#X connect 96 1 80 0;
+#X connect 96 2 98 0;
+#X connect 96 3 67 0;
diff --git a/net/tcpserver.c b/net/tcpserver.c index 5fbe9d7..a08ca82 100644 --- a/net/tcpserver.c +++ b/net/tcpserver.c @@ -88,7 +88,6 @@ typedef struct _tcpserver_send_params int sockfd; char *byte_buf; size_t length; - t_int timeout_us; } t_tcpserver_send_params; typedef struct _tcpserver @@ -107,7 +106,6 @@ typedef struct _tcpserver t_int x_sock_fd; t_int x_connectsocket; t_int x_nconnections; - t_int x_timeout_us; t_int x_blocked; t_atom x_msgoutbuf[MAX_UDP_RECEIVE]; char x_msginbuf[MAX_UDP_RECEIVE]; @@ -124,7 +122,6 @@ static void tcpserver_send_bytes(int sockfd, t_tcpserver *x, int argc, t_atom *a static int tcpserver_send_buffer_avaliable_for_client(t_tcpserver *x, int client); #endif static void *tcpserver_send_buf_thread(void *arg); -static size_t tcpserver_send_buf(int client, int sockfd, char *byte_buf, size_t length, t_int timeout_us); static void tcpserver_client_send(t_tcpserver *x, t_symbol *s, int argc, t_atom *argv); static void tcpserver_output_client_state(t_tcpserver *x, int client); static int tcpserver_get_socket_send_buf_size(int sockfd); @@ -142,23 +139,8 @@ static void *tcpserver_new(t_floatarg fportno); static void tcpserver_free(t_tcpserver *x); void tcpserver_setup(void); static void tcpserver_dump(t_tcpserver *x, t_float dump); -static void tcpserver_timeout(t_tcpserver *x, t_float timeout); static void tcpserver_hexdump(unsigned char *buf, long len); -static void tcpserver_timeout(t_tcpserver *x, t_float timeout) -{ - /* set the timeout on the select call in tcpserver_send_buf */ - /* this is the maximum time in microseconds to wait */ - /* before abandoning attempt to send */ - - t_int timeout_us = 0; - if ((timeout >= 0)&&(timeout < 1000000)) - { - timeout_us = (t_int)timeout; - x->x_timeout_us = timeout_us; - } -} - static void tcpserver_dump(t_tcpserver *x, t_float dump) { x->x_dump = (dump == 0)?0:1; @@ -398,7 +380,6 @@ static void tcpserver_send_bytes(int client, t_tcpserver *x, int argc, t_atom *a ttsp->sockfd = sockfd; ttsp->byte_buf = byte_buf; ttsp->length = j; - ttsp->timeout_us = x->x_timeout_us; if (0 != (sender_thread_result = pthread_create(&sender_thread, &sender_attr, tcpserver_send_buf_thread, (void *)ttsp))) { ++x->x_blocked; @@ -453,7 +434,6 @@ static void tcpserver_send_bytes(int client, t_tcpserver *x, int argc, t_atom *a ttsp->sockfd = sockfd; ttsp->byte_buf = byte_buf; ttsp->length = j; - ttsp->timeout_us = x->x_timeout_us; if ( 0!= (sender_thread_result = pthread_create(&sender_thread, &sender_attr, tcpserver_send_buf_thread, (void *)ttsp))) { ++x->x_blocked; @@ -496,7 +476,6 @@ static void tcpserver_send_bytes(int client, t_tcpserver *x, int argc, t_atom *a ttsp->sockfd = sockfd; ttsp->byte_buf = byte_buf; ttsp->length = length; - ttsp->timeout_us = x->x_timeout_us; if ( 0!= (sender_thread_result = pthread_create(&sender_thread, &sender_attr, tcpserver_send_buf_thread, (void *)ttsp))) { ++x->x_blocked; @@ -544,51 +523,6 @@ static void *tcpserver_send_buf_thread(void *arg) return NULL; } -// send a buffer one byte at a time, no thread -static size_t tcpserver_send_buf(int client, int sockfd, char *byte_buf, size_t length, t_int timeout_us) -{ - char *bp; - size_t sent = 0; - int result; - fd_set wfds; - struct timeval timeout; - - for (bp = byte_buf, sent = 0; sent < length;) - { - FD_ZERO(&wfds); - FD_SET(sockfd, &wfds); - timeout.tv_sec = 0; - timeout.tv_usec = timeout_us; /* give it a short time to clear buffer */ - result = select(sockfd+1, NULL, &wfds, NULL, &timeout); - if (result == -1) - { - post("%s_send_buf: select returned error %d", objName, errno); - break; - } - if (FD_ISSET(sockfd, &wfds)) - { - result = send(sockfd, bp, 1, 0);/*(sockfd, bp, (int)(length-sent), 0);*/ - if (result <= 0) - { - sys_sockerror("tcpserver: send"); - post("%s_send_buf: could not send data to client %d", objName, client+1); - break; - } - else - { - sent += result; - bp += result; - } - } - else - { - post ("%s_send_buf: can't send right now, sent %lu of %lu", objName, sent, length); - return sent;/* abandon any further attempts to send so we don't block */ - } - } - return sent; -} - /* send message to client using socket number */ static void tcpserver_send(t_tcpserver *x, t_symbol *s, int argc, t_atom *argv) { @@ -860,7 +794,7 @@ static void tcpserver_broadcast(t_tcpserver *x, t_symbol *s, int argc, t_atom *a } /* ---------------- main tcpserver (receive) stuff --------------------- */ - +/* tcpserver_notify is called by */ static void tcpserver_notify(t_tcpserver *x) { int i, k; @@ -871,6 +805,15 @@ static void tcpserver_notify(t_tcpserver *x) if(x->x_sr[i]->sr_fd == x->x_sock_fd) { x->x_nconnections--; +/* Ivica Ico Bukvic <ico@bukvic.net>:*/ + x->x_addrbytes[0].a_w.w_float = (x->x_sr[i]->sr_addr & 0xFF000000)>>24; + x->x_addrbytes[1].a_w.w_float = (x->x_sr[i]->sr_addr & 0x0FF0000)>>16; + x->x_addrbytes[2].a_w.w_float = (x->x_sr[i]->sr_addr & 0x0FF00)>>8; + x->x_addrbytes[3].a_w.w_float = (x->x_sr[i]->sr_addr & 0x0FF); + outlet_list(x->x_addrout, &s_list, 4L, x->x_addrbytes); + outlet_float(x->x_sockout, x->x_sr[i]->sr_fd); /* the socket number */ + outlet_float(x->x_connectout, x->x_nconnections); +/* /Ivica Ico Bukvic */ post("%s: \"%s\" removed from list of clients", objName, x->x_sr[i]->sr_host->s_name); tcpserver_socketreceiver_free(x->x_sr[i]); x->x_sr[i] = NULL; @@ -882,7 +825,7 @@ static void tcpserver_notify(t_tcpserver *x) } } } - outlet_float(x->x_connectout, x->x_nconnections); +// ico outlet_float(x->x_connectout, x->x_nconnections); } static void tcpserver_connectpoll(t_tcpserver *x) @@ -911,7 +854,7 @@ static void tcpserver_connectpoll(t_tcpserver *x) sys_addpollfn(fd, (t_fdpollfn)tcpserver_socketreceiver_read, y); x->x_nconnections++; i = x->x_nconnections - 1; - x->x_sr[i] = y; + x->x_sr[i] = y; x->x_sr[i]->sr_host = gensym(inet_ntoa(incomer_address.sin_addr)); x->x_sr[i]->sr_fd = fd; post("%s: accepted connection from %s on socket %d", @@ -933,14 +876,14 @@ static void tcpserver_connectpoll(t_tcpserver *x) } else post("%s_connectpoll: getsockopt returned %d\n", objName, errno); #endif - outlet_float(x->x_connectout, x->x_nconnections); - outlet_float(x->x_sockout, x->x_sr[i]->sr_fd); /* the socket number */ x->x_sr[i]->sr_addr = ntohl(incomer_address.sin_addr.s_addr); x->x_addrbytes[0].a_w.w_float = (x->x_sr[i]->sr_addr & 0xFF000000)>>24; x->x_addrbytes[1].a_w.w_float = (x->x_sr[i]->sr_addr & 0x0FF0000)>>16; x->x_addrbytes[2].a_w.w_float = (x->x_sr[i]->sr_addr & 0x0FF00)>>8; x->x_addrbytes[3].a_w.w_float = (x->x_sr[i]->sr_addr & 0x0FF); outlet_list(x->x_addrout, &s_list, 4L, x->x_addrbytes); + outlet_float(x->x_sockout, x->x_sr[i]->sr_fd); /* the socket number */ + outlet_float(x->x_connectout, x->x_nconnections); } } @@ -1034,7 +977,6 @@ static void *tcpserver_new(t_floatarg fportno) x->x_addrbytes[i].a_type = A_FLOAT; x->x_addrbytes[i].a_w.w_float = 0; } - x->x_timeout_us = 1000;/* default 1 ms for select call timeout when sending */ post ("tcpserver listening on port %d", portno); return (x); } @@ -1077,7 +1019,6 @@ void tcpserver_setup(void) class_addmethod(tcpserver_class, (t_method)tcpserver_dump, gensym("dump"), A_FLOAT, 0); class_addmethod(tcpserver_class, (t_method)tcpserver_unblock, gensym("unblock"), 0); class_addmethod(tcpserver_class, (t_method)tcpserver_broadcast, gensym("broadcast"), A_GIMME, 0); - class_addmethod(tcpserver_class, (t_method)tcpserver_timeout, gensym("timeout"), A_FLOAT, 0); class_addlist(tcpserver_class, (t_method)tcpserver_send); } |