00001 #include <stdio.h>
00002 #include <sys/socket.h>
00003 #include <arpa/inet.h>
00004 #include <stdlib.h>
00005 #include <string.h>
00006 #include <unistd.h>
00007 #include <errno.h>
00008 #include <syslog.h>
00009
00010 #include "../include/monitor.h"
00011
00012
00013 extern int verbose;
00014
00015 int initServerSocket(in_port_t port, int backlog) {
00016 int sock;
00017 struct sockaddr_in addr;
00018
00019
00020 if (-1 == (sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP))) {
00021 syslogMonitor(LOG_ERR, MON_INFO, "server.socket",
00022 "error opening socket: %s - service terminated",
00023 strerror(errno));
00024 exit(EXIT_FAILURE);
00025 }
00026
00027
00028 memset(&addr, 0, sizeof(addr));
00029
00030 addr.sin_family = AF_INET;
00031 addr.sin_addr.s_addr = htonl(INADDR_ANY);
00032 addr.sin_port = htons(port);
00033
00034
00035 if (-1 == bind(sock, (struct sockaddr *) &addr, sizeof(addr))) {
00036 syslogMonitor(LOG_ERR, MON_INFO, "server.bind",
00037 "error binding socket: %s - service terminated",
00038 strerror(errno));
00039 exit(EXIT_FAILURE);
00040 }
00041
00042
00043 if (-1 == listen(sock, backlog)) {
00044 syslogMonitor(LOG_ERR, MON_INFO, "server.listen",
00045 "error binding socket: %s - service terminated",
00046 strerror(errno));
00047 exit(EXIT_FAILURE);
00048 }
00049
00050 return sock;
00051 }
00052
00053 int acceptConnection(int servSock, char remoteAddr[16]) {
00054 int sock;
00055 struct sockaddr_in addr;
00056 unsigned int len;
00057
00058
00059 len = sizeof(addr);
00060
00061
00062 if (-1 == (sock = accept(servSock, (struct sockaddr *) &addr, &len))) {
00063 syslogMonitor(LOG_ERR, MON_INFO, "server.accept",
00064 "error acception connection: %s", strerror(errno));
00065 } else {
00066 strncpy (remoteAddr, inet_ntoa(addr.sin_addr), sizeof(remoteAddr)-1);
00067 }
00068
00069
00070 if (0 != verbose) {
00071 syslog(LOG_INFO, "handling client %s\n", inet_ntoa(addr.sin_addr));
00072 }
00073
00074 return sock;
00075 }