Example #1
0
void    Server::select_manage()
{
  while (42)
    {
      setFds();
      if (select(maxFd + 1, &fdRead, &fdWrite, NULL, NULL) == -1)
        throw ("select failed\n");
      checkFds();
        usleep(100000);
    }
}
Example #2
0
void	ServerW::launch()
{
	std::cout << "ServerW running on port 4242\nWaiting for clients..." << std::endl;
	while (1)
	{
		setFds();
		if (select(_fdMax + 1, &_fdRead, &_fdWrite, NULL, NULL) == -1)
			throw(std::exception("Select failed"));
		checkFds();
	}
}
Example #3
0
void AClient::run(std::string const& ip, int const port)
{
    _sIn.sin_family = AF_INET;
    _sIn.sin_port = htons(port);
    _sIn.sin_addr.s_addr = inet_addr(ip.c_str());
    socket();
    if (_clientType == TCP)
        connect();

    while (42)
    {
        resetFds();
        setFds();
        select();
        checkFds();
    }
}
Example #4
0
  void TcpASIOWriter::run()
  {
    bool hasMoreDatasToSend = false;
    while (m_running)
      {
		if (hasMoreDatasToSend)
	  {
			m_mutex->lock();
	    setFds();
	    m_mutex->unlock();
	    m_selector.waitForTrigger();
	    if (m_selector.getState() == Selector::Error)
	      {
		std::cerr << "Select error on writing thread." << std::endl;
		return ;
	      }
	    m_mutex->lock();
	    std::list<SocketFD> triggeredList = m_selector.getWritingTriggeredSockets();
	    hasMoreDatasToSend = false;
	    for (std::list<SocketFD>::iterator it = triggeredList.begin(); it != triggeredList.end(); ++it)
	      {
		TcpSocket* socket = m_server->getSocketByFd(*it);
		if (socket->havingPendingDatas())
		  socket->sendPendingDatas();
		if (socket->havingPendingDatas())
		  hasMoreDatasToSend = true;
	      }
	    m_mutex->unlock();
	  }
	else
	  {
	    m_condVar.wait();
	    hasMoreDatasToSend = true;
	  }
      }
    std::cout << "Writer thread stopped." << std::endl;
  }