Example #1
0
    void
    Session::run(void)
    {
      try
      {
        Thread::setPriority(Concurrency::Scheduler::POLICY_RR, 1);
      }
      catch (...)
      { }

      sendReply(220, "DUNE FTP server ready.");

      Poll poll;
      poll.add(*m_sock);
      poll.add(*m_sock_data);

      while (!isStopping())
      {
        if (m_timer.overflow())
          break;

        try
        {
          if (!poll.poll(1.0))
            continue;

          if (!poll.wasTriggered(*m_sock))
            continue;

          int rv = m_sock->read(m_bfr, sizeof(m_bfr));
          if (rv <= 0)
            break;

          for (int i = 0; i < rv; ++i)
          {
            if (m_parser.parse(m_bfr[i]))
            {
              handleCommand(m_parser.getCode(), m_parser.getParameters());
              m_timer.reset();
            }
          }
        }
        catch (...)
        {
          break;
        }
      }

      closeControlConnection();
    }