void TcpEdgeListener::HandleError(QAbstractSocket::SocketError) { QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if(socket == 0) { qCritical() << "HandleError signal received a non-socket"; return; } HandleSocketClose(socket, socket->errorString()); }
void TcpEdgeListener::HandleDisconnect() { QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender()); if(socket == 0) { qCritical() << "HandleDisconnect signal received a non-socket"; return; } HandleSocketClose(socket, "Disconnected"); }
/*=========================================================================*/ int main(int argc, char* argv[]) /*=========================================================================*/ { fd_set readfds; fd_set writefds; int highfd = 0; int fdcount = 0; SLPDSocket* sock = 0; SLPDSocket* del = 0; SLPDSocketList socketlist = {0,0}; /*------------------------------*/ /* Make sure we are root */ /*------------------------------*/ if(getuid() != 0) { SLPFatal("slpd must be started by root\n"); } /*------------------------*/ /* Parse the command line */ /*------------------------*/ if(SLPDParseCommandLine(argc,argv)) { SLPFatal("Invalid command line\n"); } /*------------------------------*/ /* Initialize the log file */ /*------------------------------*/ SLPLogFileOpen(G_SlpdCommandLine.logfile, 0); SLPLog("****************************************\n"); SLPLog("*** SLPD daemon started ***\n"); SLPLog("****************************************\n"); SLPLog("command line = %s\n",argv[0]); /*--------------------------------------------------*/ /* Initialize for the first time */ /*--------------------------------------------------*/ SLPDPropertyInit(G_SlpdCommandLine.cfgfile); SLPDDatabaseInit(G_SlpdCommandLine.regfile); SLPDSocketInit(&socketlist); /*---------------------------*/ /* make slpd run as a daemon */ /*---------------------------*/ if(Daemonize(G_SlpdCommandLine.pidfile)) { SLPFatal("Could not run as daemon\n"); } /*-----------------------*/ /* Setup signal handlers */ /*-----------------------*/ if(SetUpSignalHandlers()) { SLPFatal("Could not set up signal handlers.\n"); } /*------------------------------*/ /* Set up alarm to age database */ /*------------------------------*/ alarm(SLPD_AGE_TIMEOUT); /*-----------*/ /* Main loop */ /*-----------*/ while(G_SIGTERM == 0) { if(G_SIGHUP) { /* Reinitialize */ SLPLog("****************************************\n"); SLPLog("*** SLPD daemon restarted ***\n"); SLPLog("****************************************\n"); SLPLog("Got SIGHUP reinitializing... \n"); SLPDPropertyInit(G_SlpdCommandLine.cfgfile); SLPDDatabaseInit(G_SlpdCommandLine.regfile); SLPDSocketInit(&socketlist); G_SIGHUP = 0; } /*--------------------------------------------------------*/ /* Load the fdsets up with all of the sockets in the list */ /*--------------------------------------------------------*/ highfd = 0; FD_ZERO(&readfds); FD_ZERO(&writefds); sock = socketlist.head; while(sock) { if(sock->fd > highfd) { highfd = sock->fd; } switch(sock->state) { case DATAGRAM_UNICAST: case DATAGRAM_MULTICAST: FD_SET(sock->fd,&readfds); break; case SOCKET_LISTEN: if(socketlist.count < SLPD_MAX_SOCKETS) { FD_SET(sock->fd,&readfds); } break; case STREAM_READ: case STREAM_FIRST_READ: FD_SET(sock->fd,&readfds); break; case STREAM_WRITE: case STREAM_FIRST_WRITE: FD_SET(sock->fd,&writefds); break; case SOCKET_CLOSE: default: break; } sock = (SLPDSocket*)sock->listitem.next; } /*-----------------------------------------------*/ /* Check to see if we we should age the database */ /*-----------------------------------------------*/ /* there is a reason this is here instead of somewhere else, but I */ /* can't remember what it was. */ if(G_SIGALRM) { SLPDDatabaseAge(SLPD_AGE_TIMEOUT); G_SIGALRM = 0; alarm(SLPD_AGE_TIMEOUT); } /*-------------*/ /* Main select */ /*-------------*/ fdcount = select(highfd+1,&readfds,&writefds,0,0); if(fdcount > 0) { sock = socketlist.head; while(sock && fdcount) { if(FD_ISSET(sock->fd,&readfds)) { switch(sock->state) { case SOCKET_LISTEN: HandleSocketListen(&socketlist,sock); break; case DATAGRAM_UNICAST: case DATAGRAM_MULTICAST: HandleDatagramRead(&socketlist,sock); break; case STREAM_READ: case STREAM_FIRST_READ: HandleStreamRead(&socketlist,sock); break; default: break; } fdcount --; } if(FD_ISSET(sock->fd,&writefds)) { HandleStreamWrite(&socketlist,sock); fdcount --; } /* Should we close the socket */ /* TODO: Close aged sockets */ if(sock->state == SOCKET_CLOSE) { del = sock; sock = (SLPDSocket*)sock->listitem.next; HandleSocketClose(&socketlist,del); } else { sock = (SLPDSocket*)sock->listitem.next; } } } } SLPLog("Got SIGTERM. Going down\n"); return 0; }