示例#1
0
文件: serv.c 项目: dk00/old-stuff
main(int argc, char **argv) {  
  if (argc < 2) return 0;
  int port;
  if (sscanf(argv[1], "%d", &port) != 1) return 0;
  sockaddr_in serv;
  int sd = NewSock();
  if (sd < 0 || Bind(sd, port) < 0) return -1;
  while(1) {
    if (!Ready(sd, -1)) continue;
    char mes[516];
    sockaddr_in client;
    socklen_t c_len = sizeof(client);
    int l = recvfrom(sd, mes, 516, 0, (struct sockaddr *)&client, &c_len), stat;
    pid_t sub;
    while (qn > 0 && (sub = waitpid(-1, &stat, WNOHANG))) Dequeue(sub);
    if (Inqueue(client)) {
      fprintf(stderr, "get op = %d\n", *(short *)mes);
      continue;
    }
    sub = fork();
    if (!sub) {
      Serve(mes, client);
      _exit(0);
    }
    Enqueue(client, sub);
  }
}
示例#2
0
文件: Server.cpp 项目: vdaras/saudio
void Server::ServeClient(Socket& clientSocket) {
 
    try {

        {
            std::lock_guard<std::mutex> guard(stdoutMutex);
            std::cout << "Serving new client...\n";
        }
    
        Serve(clientSocket);

        {
            std::lock_guard<std::mutex> guard(stdoutMutex);
            std::cout << "Client served..\n";
        }

    } catch(const std::exception& e) {
        std::lock_guard<std::mutex> guard(stderrMutex);
        std::cerr << e.what() << '\n';
    } catch(...) {
        std::lock_guard<std::mutex> guard(stderrMutex);
        std::cerr << "Unexpected error!\n";
    }
    clientSocket.Close();
}
示例#3
0
void Server::ServeClient(std::shared_ptr<ISocket> clientSocket) {
 
    try {

        Serve(clientSocket);

    } catch(const std::exception& e) {
        std::lock_guard<std::mutex> guard(stderrMutex);
        std::cerr << e.what();
    }
    clientSocket->Close();
}
示例#4
0
文件: serve1.cpp 项目: multicgu/cpp
int  main( int argc, char * const argv[] )
{
	char * socket_name;
	if(argc == 1) {
		//const char * const socket_name = "/tmp/server/socket\0";
		socket_name = "/tmp/server/socket\0";
	}
	else
		socket_name = argv[1];
  //printf("%s\n",argv[1]);
  int  socket_fd;
  struct sockaddr_un  name;
  bool  serving = true;
  //  创建套接字
  socket_fd = socket( PF_LOCAL, SOCK_STREAM, 0 );
  //  设定服务器性质
  name.sun_family = AF_LOCAL;
  strcpy( name.sun_path, socket_name );
  //strcpy( name.sun_path, argv[1] );
  //  绑定套接字
  bind( socket_fd, (struct sockaddr *)&name, SUN_LEN( &name ) );
  //  侦听客户连接
  listen( socket_fd, 5 );
  //  重复接受连接,直到某个客户发出“quit”消息
  while( serving )
  {
    struct sockaddr_un  client_name;
    socklen_t  client_name_len;
    int  client_socket_fd;
    //  接受客户连接请求
    client_socket_fd = accept( socket_fd,
        (struct sockaddr *)&client_name, &client_name_len );
    serving = Serve( client_socket_fd );    //  服务连接请求
    close( client_socket_fd );    //  关闭客户连接
  }
  close( socket_fd );
  unlink( socket_name );    //  删除套接字文件
  return 0;
}
示例#5
0
		//!alias for Serve()
		void ServeInThisThread(short Port){Serve(Port);}
示例#6
0
int Spy::Bootstrap()
{
    if (m_serial.Setup() != ERR_NONE) {
       info("Spy error: cannot open serial port\n");
       return 0;
    }

    info("Sending bootstrap code to workstation %d\n", m_studentNo);

    uint16_t bootStart, bootEnd;

	// Phase 1: send and run bootstrap code
	{
		char path[strlen(m_ExePath) + strlen(STRAPON) + 2];
		sprintf(path, "%s/%s", m_ExePath, STRAPON);

		FILE* file = fopen(path, "rb");
		uint8_t sig;
		if (file == 0 || fread(&sig, 1, 1, file) != 1) {
			info("Cannot read %s\n", path);
			return 0;
		}
		if (sig != 0xfe) {
			info("Not a BIN file %s\n", path);
			return 0;
		}

		BasicSender basicSender(&m_serial, m_studentNo);

		if (!basicSender.SendCommand("    WIDTH 80:COLOR9,1")) {
			info("Could not send command\n");
			return 0;
		}

		sleep(2);

		if (!basicSender.sendBIN(file, &bootStart, &bootEnd, 0)) {
			info("Bootstrap code upload error\n");
			return 0;
		}
	}

	info("Waiting for remote party...");
	sleep(1);
	info("OK\n");

	// Phase 2: upload memories
	SpyTransport transport(&m_serial);
	{
		info("Uploading zero page\n");
		// Zero page
		transport.SendMemory(m_MSXRAM + 0x0000, 0x0000, 256);

		// MSX-DOS BDOS area .. 0xED00
		uint16_t start = m_MSXRAM[6] | (m_MSXRAM[7] << 8);
		int length = bootStart - start;

		// patch the stupid loaded flag in MSXDOS+1A
		m_MSXRAM[(start & 0xff00) + 0x1A] = 0;

		if (length > 0) {
			info("Uploading memory area %04x-%04x\n", start, start + length);
			transport.SendMemory(m_MSXRAM + start, start, length);

			usleep(20000);

			// 0xED00 + sizeof(Bootstrap) .. EndOfWorkArea
			start = bootEnd;
		} 
		length = 0xf380 - start;

		info("Uploading memory area %04x-%04x\n", start, start + length);
		transport.SendMemory(m_MSXRAM + start, start, length);

		usleep(20000);

		// Net BDOS
		info("Uploading NetBDOS area %04x-%04x\n", 0xe900, 0xe900 + m_BDOSSize);
		transport.SendMemory(m_BDOS, 0xe900, m_BDOSSize);
	}

	// Phase 3: upload file to TPA if specified
	if (m_nfiles > 0) {
		int comsize;
		info("Uploading TPA file %s\n", m_file[0]);
		if ((comsize = loadFile(m_file[0], &m_COMFile, -1)) != 0) {
			transport.SendMemory(m_COMFile, 0x100, comsize);
		}
	}

	info("Launching remote workstation\n");

	// Phase 3: Launch remote station
	transport.SendCommand(2);

	sleep(1);

	return Serve();
}