[PD-cvs] externals/mrpeach/net tcpserver.c,1.7,1.8

Martin Peach mrpeach at users.sourceforge.net
Tue Aug 7 00:18:14 CEST 2007


Update of /cvsroot/pure-data/externals/mrpeach/net
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24455

Modified Files:
	tcpserver.c 
Log Message:
Closing socket should actually work now. Before it was just removing it from the list. 


Index: tcpserver.c
===================================================================
RCS file: /cvsroot/pure-data/externals/mrpeach/net/tcpserver.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** tcpserver.c	2 Aug 2007 15:56:10 -0000	1.7
--- tcpserver.c	6 Aug 2007 22:18:12 -0000	1.8
***************
*** 105,108 ****
--- 105,109 ----
  static void tcp_server_send_bytes(int sockfd, t_tcpserver *x, int argc, t_atom *argv);
  static void tcpserver_client_send(t_tcpserver *x, t_symbol *s, int argc, t_atom *argv);
+ static void tcpserver_disconnect(t_tcpserver *x);
  static void tcpserver_client_disconnect(t_tcpserver *x, t_floatarg fclient);
  static void tcpserver_socket_disconnect(t_tcpserver *x, t_floatarg fsocket);
***************
*** 407,410 ****
--- 408,435 ----
  }
  
+ /* disconnect the client at x_sock_fd */
+ static void tcpserver_disconnect(t_tcpserver *x)
+ {
+     int i, fd;
+     t_tcpserver_socketreceiver *y;
+ 
+     if (x->x_sock_fd >= 0)
+     {
+         /* find the socketreceiver for this socket */
+         for(i = 0; i < x->x_nconnections; i++)
+         {
+             if(x->x_fd[i] == x->x_sock_fd)
+             {
+                 y = x->x_sr[i];
+                 fd = x->x_fd[i];
+                 if (y->sr_notifier) (*y->sr_notifier)(x);
+                 sys_rmpollfn(fd);
+                 sys_closesocket(fd);
+                 x->x_sock_fd = -1;
+             }
+         }
+     }
+ }
+ 
  /* disconnect a client by socket */
  static void tcpserver_socket_disconnect(t_tcpserver *x, t_floatarg fsocket)
***************
*** 418,425 ****
      }
      x->x_sock_fd = sock;
!     tcpserver_notify(x);
  }
  
- 
  /* disconnect a client by number */
  static void tcpserver_client_disconnect(t_tcpserver *x, t_floatarg fclient)
--- 443,449 ----
      }
      x->x_sock_fd = sock;
!     tcpserver_disconnect(x);
  }
  
  /* disconnect a client by number */
  static void tcpserver_client_disconnect(t_tcpserver *x, t_floatarg fclient)
***************
*** 439,443 ****
      --client;/* zero based index*/
      x->x_sock_fd = x->x_fd[client];
!     tcpserver_notify(x);
  }
  
--- 463,467 ----
      --client;/* zero based index*/
      x->x_sock_fd = x->x_fd[client];
!     tcpserver_disconnect(x);
  }
  





More information about the Pd-cvs mailing list