/[LeafOK_CVS]/lbbs/src/net_server.c
ViewVC logotype

Annotation of /lbbs/src/net_server.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.10 - (hide annotations)
Sun Mar 20 17:37:14 2005 UTC (21 years ago) by sysadm
Branch: MAIN
Changes since 1.9: +30 -28 lines
Content type: text/x-csrc
*** empty log message ***

1 sysadm 1.1 /***************************************************************************
2 sysadm 1.2 net_server.c - description
3 sysadm 1.1 -------------------
4     begin : Mon Oct 11 2004
5     copyright : (C) 2004 by Leaflet
6     email : leaflet@leafok.com
7     ***************************************************************************/
8    
9     /***************************************************************************
10     * *
11     * This program is free software; you can redistribute it and/or modify *
12     * it under the terms of the GNU General Public License as published by *
13     * the Free Software Foundation; either version 2 of the License, or *
14     * (at your option) any later version. *
15     * *
16     ***************************************************************************/
17    
18     #include "common.h"
19 sysadm 1.7 #include "io.h"
20     #include <sys/socket.h>
21     #include <netinet/in.h>
22 sysadm 1.9 #include <arpa/inet.h>
23 sysadm 1.3
24 sysadm 1.1 int
25     net_server (const char *hostaddr, unsigned int port)
26     {
27 sysadm 1.7 int namelen, seq, netint;
28 sysadm 1.1 struct sockaddr_in sin;
29 sysadm 1.2 char temp[256];
30 sysadm 1.1
31 sysadm 1.7 socket_server = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
32 sysadm 1.1
33 sysadm 1.7 if (socket_server < 0)
34 sysadm 1.1 {
35 sysadm 1.2 log_error ("Create socket failed\n");
36 sysadm 1.1 exit (1);
37     }
38    
39     sin.sin_family = AF_INET;
40     sin.sin_addr.s_addr =
41     (strlen (hostaddr) > 0 ? inet_addr (hostaddr) : INADDR_ANY);
42     sin.sin_port = htons (port);
43    
44 sysadm 1.10 if (bind (socket_server, (struct sockaddr *) &sin, sizeof (sin)) < 0)
45 sysadm 1.1 {
46 sysadm 1.7 log_error ("Bind address %s:%u failed\n",
47 sysadm 1.10 inet_ntoa (sin.sin_addr), ntohs (sin.sin_port));
48 sysadm 1.1 exit (2);
49     }
50    
51 sysadm 1.7 if (listen (socket_server, 10) < 0)
52 sysadm 1.1 {
53 sysadm 1.2 log_error ("Socket listen failed\n");
54 sysadm 1.1 exit (3);
55     }
56    
57 sysadm 1.10 strcpy (hostaddr_server, inet_ntoa (sin.sin_addr));
58     port_server = ntohs (sin.sin_port);
59    
60 sysadm 1.8 log_std ("Listening at %s:%d\n", hostaddr_server, port_server);
61 sysadm 1.3
62 sysadm 1.1 namelen = sizeof (sin);
63 sysadm 1.10 while (1)
64 sysadm 1.1 {
65 sysadm 1.10 if ((socket_client =
66     accept (socket_server, (struct sockaddr *) &sin, &namelen)) < 0)
67     {
68     log_error ("Accept connection error\n");
69     continue;
70     }
71    
72     strcpy (hostaddr_client, (const char *) inet_ntoa (sin.sin_addr));
73     port_client = ntohs (sin.sin_port);
74    
75     log_std ("Accept connection from %s:%d\n", hostaddr_client,
76     port_client);
77    
78     if (fork_server () < 0)
79     {
80     log_error ("Fork error\n");
81     }
82    
83     if (close (socket_client) == -1)
84     {
85     log_error ("Close client socket failed\n");
86     }
87 sysadm 1.1 }
88    
89 sysadm 1.10 if (close (socket_server) == -1)
90 sysadm 1.7 {
91 sysadm 1.10 log_error ("Close server socket failed\n");
92 sysadm 1.7 }
93    
94 sysadm 1.1 return 0;
95     }

webmaster@leafok.com
ViewVC Help
Powered by ViewVC 1.3.0-beta1