Пример #1
0
int main(int argc, char const *argv[])
{
    printf("Befin insrv !!!\n");
	printf("serverIsBigEndian == %d !!!\n", isBigEndian());
	
	CShmQueueSingle inq, outq;

	outq.crt(1024 * 1024 * 16, 1111);
    outq.get();
    outq.init();
    outq.clear();

    inq.crt(1024 * 1024 * 16, 2222);
    inq.get();
    inq.init();
    inq.clear();

    CSocketEpoll epoll(8000, 0, 1000, 0, 1, 1);//(int epoll_Size, int epoll_Timeout, int Listenq, int clientIsBigEndian, int serverIsBigEndian)
    epoll.prepare("0.0.0.0", 10203, &outq, &inq);//(const char * serv_addr, int port_num, CShmQueueSingle *poutq, CShmQueueSingle *pinq);
    epoll.run();
	
	
	// test_socket_srv("192.168.190.131", 10203);
	
	return 0;
}
Пример #2
0
void TestHTTP::requestResponseOverSocket()
{
	TESTSTEP("SigPipe handler, EPoll, listening, connecting with client");
	csjp::Signal pipeSignal(SIGPIPE, csjp::Signal::sigpipeHandler);
	csjp::EPoll epoll(5);
	HTTPListener listener("127.0.0.1", 30303);
	epoll.add(listener);
	HTTPClient client("127.0.0.1", 30303);
	epoll.add(client);
	epoll.waitAndControl(10); // 0.01 sec
	VERIFY(businessServers.size() == 1);
	for(auto & server : businessServers)
		epoll.add(server);

	TESTSTEP("Client sends request");
	client.sendTestRequest();
	for(auto event : epoll.waitAndControl(10)){ // 0.01 sec
		DBG("ControlEvent received: %", event.name());
		switch(event.code){
		case csjp::EPoll::ControlEventCode::ClosedByPeer:
			break;
		case csjp::EPoll::ControlEventCode::ClosedByHost:
			break;
		case csjp::EPoll::ControlEventCode::Exception:
			EXCEPTION(event.exception);
			throw;
			break;
		}
	}

	TESTSTEP("Server responses");
	for(int i=0; i<10 && businessServers.size(); i++)
	{
		for(auto event : epoll.waitAndControl(10)){ // 0.01 sec
			DBG("ControlEvent received: %", event.name());
			switch(event.code){
			case csjp::EPoll::ControlEventCode::ClosedByPeer:
				break;
			case csjp::EPoll::ControlEventCode::ClosedByHost:
				break;
			case csjp::EPoll::ControlEventCode::Exception:
				EXCEPTION(event.exception);
				throw;
				break;
			}
		}
	}
	VERIFY(businessServers.size() == 1);

	TESTSTEP("Destructors do the rest of cleanup");
}
int main()
{
	Socket();
	Bind();
	Listen();

	while (1) {
		select()/poll()/epoll();

		if () {
			Accept();
		}
		else {
			while (1) {
				Recv() / Send();
			}
		}
	}
Пример #4
0
EventEngine::Ptr EventEngineFactory::createTP(const Config& p_config)
{
  Epoll::Ptr epoll(new Epoll());
  EpollED::Ptr epollED(new EpollED(epoll));
  EventEngines::ThreadPool::Ptr tp(new EventEngines::ThreadPool(epollED, p_config.eventEngineSize));

  KeyboardSocket::Ptr keybSocket(new KeyboardSocket());
  KeyboardES::Ptr keybES(new KeyboardES(keybSocket));
  EventHandler::Ptr keybEH(new KeyboardTPEH("log.txt", keybES, *tp));

  TcpSocket::Ptr listenerSokcet(new TcpSocket());
  ListenerES::Ptr listenerES(new ListenerES(listenerSokcet, p_config.port));
  EventHandler::Ptr acceptorEH(new AcceptorEH<EventEngines::ThreadPool>(listenerES, *tp));

  tp->add(keybEH);
  tp->add(acceptorEH);

  return EventEngine::Ptr(new ThreadPoolEE(tp));
}
Пример #5
0
EventEngine::Ptr EventEngineFactory::createReactor(const Config& p_config)
{
  Epoll::Ptr epoll(new Epoll());
  EpollED::Ptr epollED(new EpollED(epoll));
  EventEngines::Reactor::Ptr r(new EventEngines::Reactor(epollED));

  KeyboardSocket::Ptr keybSocket(new KeyboardSocket());
  KeyboardES::Ptr keybES(new KeyboardES(keybSocket));
  EventHandler::Ptr keybEH(new KeyboardReactorEH("log.txt", keybES));

  TcpSocket::Ptr listenerSokcet(new TcpSocket());
  ListenerES::Ptr listenerES(new ListenerES(listenerSokcet, p_config.port));
  EventHandler::Ptr acceptorEH(new AcceptorEH<EventEngines::Reactor>(listenerES, *r));

  r->add(keybEH);
  r->add(acceptorEH);

  return EventEngine::Ptr(new ReactorEE(r));
}
Пример #6
0
int TCPServer::run()
{
	int nInterval = 0;
	while (m_bThreadRunFlag)
	{
		//1.epoll接收新连接,处理注册事件业务请求
		if (epoll() != VIOLET_SUCCESS)
			nInterval += 5000;
		else
			nInterval += 10;

		//2.清理超时连接,利用其epoll的超时时间作为参考,间隔约为30s
		if (nInterval > 30000)
		{
			clearTimeOutConnection();
			nInterval= 0;
		}
		PUB_Sleep(2);
	}
	return VIOLET_SUCCESS;
}
Пример #7
0
EventEngine::Ptr EventEngineFactory::createHSHA(const Config& p_config)
{
  Epoll::Ptr epoll(new Epoll());
  EpollED::Ptr epollED(new EpollED(epoll));
  HSHA::Ptr hsha(new HSHA(epollED, p_config.eventEngineSize));

  KeyboardSocket::Ptr keybSocket(new KeyboardSocket());
  KeyboardES::Ptr keybES(new KeyboardES(keybSocket));
  SEH::Ptr keybSEH(new KeyboardSEH("log.txt", keybES));
  AEH::Ptr keybAEH;
  HSHA::Handlers keybHandlers(keybSEH, keybAEH);

  TcpSocket::Ptr listenerSokcet(new TcpSocket());
  ListenerES::Ptr listenerES(new ListenerES(listenerSokcet, p_config.port));
  SEH::Ptr acceptorSEH(new AcceptorSEH(listenerES, *hsha));
  AEH::Ptr acceptorAEH;
  HSHA::Handlers acceptorHandlers(acceptorSEH, acceptorAEH);

  hsha->add(keybHandlers);
  hsha->add(acceptorHandlers);

  return EventEngine::Ptr(new HalfSyncHalfAsyncEE(hsha));
}
Пример #8
0
int main(int argc, char** args) {
    try {
        uint16_t port = 8080;
        if (argc > 1) {
            port = (uint16_t) std::stoi(args[1]);
        }

        epoll_wrap epoll(200);
        resolver<proxy_server::resolver_extra> ip_resolver;
        proxy_server proxy(epoll, ip_resolver, port, 200);

        std::string tag = "server on port " + std::to_string(port);
        signal_fd sig_fd({SIGINT, SIGPIPE}, {signal_fd::SIMPLE});

        epoll_registration signal_registration(epoll, std::move(sig_fd), fd_state::IN);
        signal_registration.update([&signal_registration, &epoll, tag](fd_state state) mutable {
            if (state.is(fd_state::IN)) {
                struct signalfd_siginfo sinf;
                long size = signal_registration.get_fd().read(&sinf, sizeof(struct signalfd_siginfo));
                if (size != sizeof(struct signalfd_siginfo)) {
                    return;
                }
                if (sinf.ssi_signo == SIGINT) {
                    log("\n" + tag, "stopped");
                    epoll.stop_wait();
                }
            }
        });

        log(tag, "started");
        epoll.start_wait();

    } catch (annotated_exception const &e) {
        log(e);
    }
}
Пример #9
0
Файл: cws.c Проект: jtsymon/cws
int main (int argc, char **argv) {

    srand (time (NULL));
    int port = 8080;
    int work = 4;

    sighandleall (&signal_handler, SA_RESTART);

    argv0 = *argv;
    setname ("cws[master]");

    int selfpiperead;
    {
        int pipefd[2];
        if (pipe (pipefd) == -1) {
            die("pipe");
        }
        selfpipe = pipefd[1];
        selfpiperead = pipefd[0];
    }

    worker_init (port, "file");
    spawn_workers (work);

    tcgetattr (STDIN_FILENO, &old_term);
    atexit (&cleanup);
    setterm();

    int epollfd = epoll();
    epoll_add (epollfd, STDIN_FILENO);
    epoll_add (epollfd, selfpiperead);

    struct epoll_event events[MAX_QUEUE];

    int i, n;
    char cmd;
    while (1) {
        n = epoll_wait (epollfd, events, MAX_QUEUE, -1);
        for (i = 0; i < n; i++) {
            if ((events[i].events & EPOLLERR) ||
                    (events[i].events & EPOLLHUP) ||
                    (!(events[i].events & EPOLLIN))) {
                exit(1);
            } else if (STDIN_FILENO == events[i].data.fd) {
                // user input event
                cmd = getchar();
                switch (cmd) {
                    case 'k':
                        printf ("Killing workers\n");
                        finish(1);
                        break;
                    case 'q':
                        printf ("Telling workers to exit\n");
                        finish(0);
                        break;
                    case '+':
                        spawn_workers (worker_count + 1);
                        break;
                    case '-':
                        spawn_workers (worker_count - 1);
                        break;
                }
            } else {
                // pipe event
                if (read (selfpiperead, &cmd, 1) <= 0) {
                    die ("read");
                }
                switch (cmd) {
                    case CMD_KILL:
                        printf ("Killing workers\n");
                        finish(0);
                        break;
                    case CMD_TERM:
                        printf ("Telling workers to exit\n");
                        finish(1);
                        break;
                    case CMD_INCR:
                        spawn_workers (worker_count + 1);
                        break;
                    case CMD_DECR:
                        spawn_workers (worker_count - 1);
                        break;
                    case CMD_CHLD:
                        check_workers();
                        break;
                }
            }
        }
    }
    return 0; 
}