--- lbbs/src/net_server.c 2004/10/21 17:28:46 1.6 +++ lbbs/src/net_server.c 2005/03/20 17:37:14 1.10 @@ -16,17 +16,21 @@ ***************************************************************************/ #include "common.h" +#include "io.h" +#include +#include +#include int net_server (const char *hostaddr, unsigned int port) { - int sock_server, sock_client, namelen, seq, netint; + int namelen, seq, netint; struct sockaddr_in sin; char temp[256]; - sock_server = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); + socket_server = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (sock_server < 0) + if (socket_server < 0) { log_error ("Create socket failed\n"); exit (1); @@ -37,51 +41,54 @@ net_server (const char *hostaddr, unsign (strlen (hostaddr) > 0 ? inet_addr (hostaddr) : INADDR_ANY); sin.sin_port = htons (port); - if (bind (sock_server, (struct sockaddr *)&sin, sizeof(sin)) < 0) + if (bind (socket_server, (struct sockaddr *) &sin, sizeof (sin)) < 0) { - sprintf(temp, "Bind address %s:%u failed\n", - inet_ntoa(sin.sin_addr), ntohs(sin.sin_port)); - log_error (temp); + log_error ("Bind address %s:%u failed\n", + inet_ntoa (sin.sin_addr), ntohs (sin.sin_port)); exit (2); } - if (listen (sock_server, 10) < 0) + if (listen (socket_server, 10) < 0) { log_error ("Socket listen failed\n"); exit (3); } - socket_server = sock_server; - strcpy(hostaddr_server,(const char *)inet_ntoa(sin.sin_addr)); - port_server = ntohs(sin.sin_port); - - sprintf(temp, "Listening at %s:%d\n", - hostaddr_server, port_server); - log_std (temp); + strcpy (hostaddr_server, inet_ntoa (sin.sin_addr)); + port_server = ntohs (sin.sin_port); + + log_std ("Listening at %s:%d\n", hostaddr_server, port_server); namelen = sizeof (sin); - while(1) + while (1) + { + if ((socket_client = + accept (socket_server, (struct sockaddr *) &sin, &namelen)) < 0) + { + log_error ("Accept connection error\n"); + continue; + } + + strcpy (hostaddr_client, (const char *) inet_ntoa (sin.sin_addr)); + port_client = ntohs (sin.sin_port); + + log_std ("Accept connection from %s:%d\n", hostaddr_client, + port_client); + + if (fork_server () < 0) + { + log_error ("Fork error\n"); + } + + if (close (socket_client) == -1) + { + log_error ("Close client socket failed\n"); + } + } + + if (close (socket_server) == -1) { - if ((sock_client = accept (sock_server, (struct sockaddr *) &sin, &namelen)) < 0) - { - log_error ("Accept connection error\n"); - } - else - { - sprintf(temp, "Accept connection from %s:%d\n", - inet_ntoa(sin.sin_addr),ntohs(sin.sin_port)); - log_std (temp); - } - - if (fork_server(sock_server, sock_client, &sin)<0) - { - log_error ("Fork error\n"); - } - - if (close(sock_client) == -1) - { - log_error("Close client socket failed\n"); - } + log_error ("Close server socket failed\n"); } return 0;