X-Git-Url: https://hackdaworld.org/gitweb/?a=blobdiff_plain;f=src%2Fnetwork.c;h=55fa2c6a8addaf2d9a92d2fb91f9926c15b6af57;hb=25e53b7c9b49f76c122a7425f6533de17810759b;hp=3293a570adad366fb9f28fdac6ee4ee587e0e235;hpb=c799218d9fee714d9934b499b0b24fd75535c312;p=my-code%2Fivac.git diff --git a/src/network.c b/src/network.c index 3293a57..55fa2c6 100644 --- a/src/network.c +++ b/src/network.c @@ -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) { @@ -144,7 +142,7 @@ int network_connect(t_net *net,int channel) { return N_E_IN_USE; } if(!(net->connection[channel].status&C_INFO_A)) { - printf("[network] connect failed, missing configuration for channel %02d", + printf("[network] connect failed, missing configuration for channel %02d\n", channel); return N_E_NO_INFO; } @@ -157,7 +155,7 @@ int network_connect(t_net *net,int channel) { int network_close(t_net *net,int channel) { if(!(net->connection[channel].status&C_ESTABL)) { - printf("[network] close failed, channel %02d not active",channel); + printf("[network] close failed, channel %02d not active\n",channel); return N_E_NC; } @@ -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;channelconnection[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) {