--- lbbs/src/net_server.c 2004/10/18 08:44:39 1.1 +++ lbbs/src/net_server.c 2004/10/19 17:11:39 1.4 @@ -1,5 +1,5 @@ /*************************************************************************** - bbsd.c - description + net_server.c - description ------------------- begin : Mon Oct 11 2004 copyright : (C) 2004 by Leaflet @@ -16,23 +16,19 @@ ***************************************************************************/ #include "common.h" -#include -#include -#include int net_server (const char *hostaddr, unsigned int port) { - int sock, namelen, seq, netint; + int sock_server, sock_client, namelen, seq, netint; struct sockaddr_in sin; - char msgsock; - char buf[1024]; + char temp[256]; - sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); + sock_server = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); - if (sock < 0) + if (sock_server < 0) { - perror ("socket"); + log_error ("Create socket failed\n"); exit (1); } @@ -41,23 +37,49 @@ net_server (const char *hostaddr, unsign (strlen (hostaddr) > 0 ? inet_addr (hostaddr) : INADDR_ANY); sin.sin_port = htons (port); - if (bind (sock, (struct sockaddr *) &sin, sizeof (sin)) < 0) + if (bind (sock_server, (struct sockaddr *)&sin, sizeof(sin)) < 0) { - perror ("bind"); + log_error ("Bind address failed\n"); exit (2); } - if (listen (sock, 10) < 0) + if (listen (sock_server, 10) < 0) { - perror ("listen"); + log_error ("Socket listen failed\n"); exit (3); } + socket_server = sock_server; + strcpy(hostaddr_server,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); + namelen = sizeof (sin); - if ((msgsock = accept (sock, (struct sockaddr *) &sin, &namelen)) < 0) + while(1) { - perror ("accept"); - exit (4); + 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"); + } } return 0;