added network_close_all function
[my-code/ivac.git] / src / network.c
index 449dacf..55fa2c6 100644 (file)
@@ -27,17 +27,15 @@ int network_init(t_net *net) {
   addr.sin_port=htons(net->l_port);
   addr.sin_addr.s_addr=INADDR_ANY;
 
-  /* prevent addres in use error message */
-  true=1;
-  if(setsockopt(net->l_fd,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(true))==-1) {
-    perror("[network] setsockopt call");
-    return N_ERROR;
-  }
-
   if(bind(net->l_fd,(struct sockaddr *)&addr,
           sizeof(struct sockaddr))==-1) {
-    perror("[network] bind call");
-    return N_ERROR;
+    /* try harder ... */
+    true=1;
+    if(setsockopt(net->l_fd,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(true))==-1) {
+      perror("[network] setsockopt call");
+      return N_ERROR;
+    }
+    puts("[network] reused address");
   }
 
   if(listen(net->l_fd,MAX_LISTEN_QUEUE)==-1) {
@@ -165,6 +163,16 @@ int network_close(t_net *net,int channel) {
   return(network_manage_connection(net)); /* could be other channel too */
 }
 
+int network_close_all(t_net *net) {
+
+  int channel;
+
+  for(channel=0;channel<MAX_CONNECTIONS;channel++)
+    if(net->connection[channel].status&C_ESTABL) network_close(net,channel);
+
+  return N_SUCCESS;
+}
+
 int network_set_connection_info(t_net *net,int channel,char *ip,int port) {
 
   if(net->connection[channel].status&C_IN_USE) {