00001
00055 #include <unistd.h>
00056 #include <errno.h>
00057 #include <string.h>
00058 #include <assert.h>
00059 #include <sys/time.h>
00060 #include <sys/types.h>
00061 #include <sys/socket.h>
00062 #include <sys/ioctl.h>
00063 #include <signal.h>
00064 #include <netinet/in.h>
00065 #include <netdb.h>
00066 #include <stdlib.h>
00067
00068 #include "acceptor.h"
00069 #include "utils.h"
00070 #include "globals.h"
00071 #include "tcp_accept.h"
00072 #include "config.h"
00073 #include "worker.h"
00074
00075
00076
00077 int dp_add_pid(pid_t pid);
00078 void dp_del_pid(pid_t pid);
00079
00086 void acceptor_process(dp_config *cfg)
00087 {
00088 int i,k;
00089 unsigned int sock;
00090
00091 LOG(L_INFO,"INFO:Acceptor process starting up...\n");
00092 listening_socks = pkg_malloc((cfg->acceptors_cnt+1)*sizeof(int));
00093 if (!listening_socks){
00094 LOG_NO_MEM("pkg",(cfg->acceptors_cnt+1)*sizeof(int));
00095 goto done;
00096 }
00097 memset(listening_socks,0,(cfg->acceptors_cnt+1)*sizeof(int));
00098 k=0;
00099 for(i=0;i<cfg->acceptors_cnt;i++)
00100 if (create_socket(cfg->acceptors[i].port,cfg->acceptors[i].bind,&sock)){
00101 listening_socks[k++]=sock;
00102 }
00103
00104
00105 LOG(L_INFO,"INFO:... Acceptor opened sockets. Entering accept loop ...\n");
00106 accept_loop();
00107
00108 for(i=0;listening_socks[i];i++)
00109 close(listening_socks[i]);
00110
00111 if (listening_socks) pkg_free(listening_socks);
00112 #ifdef CDP_FOR_SER
00113 #else
00114 #ifdef PKG_MALLOC
00115 #ifdef PKG_MALLOC
00116 LOG(memlog, "Acceptor Memory status (pkg):\n");
00117
00118 #ifdef pkg_sums
00119 pkg_sums();
00120 #endif
00121 #endif
00122 #endif
00123 dp_del_pid(getpid());
00124 #endif
00125 done:
00126 LOG(L_INFO,"INFO:... Acceptor process finished\n");
00127 exit(0);
00128 }