コード例 #1
0
ファイル: nbd-server.c プロジェクト: madpenguin/VDCCloud
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");
}
コード例 #2
0
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);
}
コード例 #3
0
ファイル: main.c プロジェクト: jsvisa/apue
int main(int argc, char **argv) {
	char ch;

	doSession(STDIN_FILENO);
	return 0;
}