aboutsummaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorMartin Peach <mrpeach@users.sourceforge.net>2010-03-27 15:58:59 +0000
committerMartin Peach <mrpeach@users.sourceforge.net>2010-03-27 15:58:59 +0000
commit49118ee4d97b13d4dbe076c45c5f762698a496ab (patch)
tree08d1dedfdf51d7162960926f55dcf2873011c51f /net
parenta84d0bd1965c0b1ce7d9b9d9803cc6b734d33bcb (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.pd371
-rw-r--r--net/tcpserver.c87
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);
}