DLib - Почему start_async() не принимает соединения в фоновом потоке?

Это моя первая попытка с DLib. Моя цель - иметь фоновый сервер, к которому я могу подключиться одновременно со многими клиентскими потоками. Согласно документации, start_async() должен быть путь с конкретной реализацией dlib::serverтак вот как я настроил свой сервер.

class TestServer : public dlib::server
{
    private:
        void on_connect(dlib::connection& c)
        {
            cout << "Hi." << endl;
        }

    public:
        void start_server()
        {
            set_listening_ip("127.0.0.1");
            set_listening_port(4790);

            start_async();
        }
};

Что следует, это мой ServerMain.cpp:

int main(int argc, char** argv)
{
    TestServer ts;

    try
    {
        ts.start_server();
    }
    catch(exception& e)
    {
        cerr << e.what() << endl;
    }

    return 0;
}

А это мой ClientMain.cpp:

int main(int argc, char** argv)
{
    try
    {
        iosockstream stream("127.0.0.1:4790");

        cout << "CLIENT - Connected." << endl;
    }
    catch(exception& e)
    {
        cerr << e.what() << endl;
    }

    cout << "Done." << endl;

    return 0;
}

После запуска моего сервера любая попытка подключиться к нему с помощью клиента приводит к исключению:

unable to connect to '127.0.0.1:4790'

Кроме того, ни lsof ни netstat показать любой процесс, прослушивающий порт 4790,Что я делаю неправильно?

Я на Mac OS X 10.9.5, скомпилирован с -std=c++11 -DDLIB_NO_GUI_SUPPORT,

1 ответ

Решение

Прямо из документации dlib::server для start_async() написано

does NOT block.  That is, this function will return right away and
the server will run on a background thread until clear() or this
object's destructor is called (or until some kind of fatal error
occurs). 

Таким образом, ваша серверная программа завершается немедленно, потому что вы даете программе завершиться (вы выходите из main ()). Вы должны сделать что-то, чтобы сохранить вашу программу живой. Например, вызовите start () сервера вместо start_async().

Другие вопросы по тегам