void doAccept(int listener) { int net,f,sock; fd_set rfds; struct sockaddr_storage addrin; socklen_t addrinlen=sizeof(addrin); doLog("Enter ACCEPT"); while(1) { FD_ZERO(&rfds); FD_SET(listener, &rfds); if(select(listener+1, &rfds, NULL, NULL, NULL)>0) { if(FD_ISSET(listener, &rfds)) { if ((sock=accept(listener, (struct sockaddr *) &addrin, &addrinlen)) < 0) { doError("Error on ACCEPT"); continue; } f = fork(); if(f<0) { printf("Fork error [err=%d]\n",errno); exit(1); } if(f==0) { syslog(LOG_INFO,"Forkd new process with id = %d",getpid()); setsid(); for (f=getdtablesize();f>=0;--f) if(f!=sock) close(f); f=open("/dev/null",O_RDWR); dup(f); dup(f); umask(027); chdir("/tmp/"); doSession(sock); close(sock); syslog(LOG_INFO,"Process with pid %d terminated",getpid()); exit(0); } close(sock); } } } doLog("Exit ACCEPT"); }
int main(int argc, char **argv) { if ((argc != 1) && (argc != 3)) { usage(); exit(EXIT_FAILURE); } if (argc == 3) { gdbServerPort = atoi(argv[1]); gdbClientPort = atoi(argv[2]); } fprintf(stderr, "Will expect SERVER on port %d \n", gdbServerPort); fprintf(stderr, "Will provide CLIENT on port %d \n", gdbClientPort); fflush(stderr); #ifdef WIN32 // Initiate use of the Winsock DLL by this process. WSADATA wsaData; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { fprintf(stderr, "Winsock initialization (WSAStartup()) failed. Error = %d\n", NET_ERROR_NUM); fflush(stderr); return (1); } #endif int listenSocket = INVALID_SOCKET; // Connection to wait for client connections on if (createSocket(&listenSocket, gdbClientPort, FALSE) == GDB_OK) { for (;;) { doSession(listenSocket); } } if (listenSocket >= 0) { closesocket(listenSocket); } #ifdef WIN32 WSACleanup(); #endif return (EXIT_FAILURE); }
int main(int argc, char **argv) { char ch; doSession(STDIN_FILENO); return 0; }