int main(int argc, char **argv) { int listenfd, connfd; struct sockaddr_un servaddr; int clilen; bool do_fork = true; bool no_wait = false; doLoop=true; dprintf("startup!!!\n\n"); if(argc > 1) { for(int i = 1; i < argc; i++) { if(strncmp(argv[i], "-f", 2) == 0) { do_fork = false; } else if(strncmp(argv[i], "-w", 2) == 0) { no_wait=true; } } } if(do_fork) { switch(fork()) { case -1: perror("[timerd] fork"); return -1; case 0: break; default: return 0; } if(setsid() == -1) { perror("[timerd] setsid"); return -1; } } memset(&servaddr, 0, sizeof(struct sockaddr_un)); servaddr.sun_family = AF_UNIX; strcpy(servaddr.sun_path, TIMERD_UDS_NAME); clilen = sizeof(servaddr.sun_family) + strlen(servaddr.sun_path); unlink(TIMERD_UDS_NAME); //network-setup if((listenfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { dperror("error while socket create"); } if( bind(listenfd, (struct sockaddr*) &servaddr, clilen) <0 ) { dperror("bind failed..."); exit(-1); } if(listen(listenfd, 15) !=0) { perror("listen failed..."); exit( -1 ); } if(!no_wait) { // wait for correct date to be set... CSectionsdClient sectionsd; while(!sectionsd.getIsTimeSet()) sleep(1); } loadTimersFromConfig(); //startup Timer try { CBasicMessage::Header rmessage; while(doLoop) // wait for incomming messages { connfd = accept(listenfd, (struct sockaddr*) &servaddr, (socklen_t*) &clilen); memset(&rmessage, 0, sizeof(rmessage)); read(connfd,&rmessage,sizeof(rmessage)); parse_command(connfd, &rmessage); close(connfd); } } catch(std::exception& e) { dprintf("caught std-exception in main-thread %s!\n", e.what()); } catch(...) { dprintf("caught exception in main-thread!\n"); } }