DLib – Pourquoi start_async () n’accepte pas les connexions dans un thread d’arrière-plan?

Ceci est ma première tentative avec DLib. Mon objective est d’avoir un serveur d’arrière-plan auquel je peux me connecter simultanément avec de nombreux threads clients. Selon la documentation, start_async() devrait être le moyen de procéder avec une implémentation concrète de dlib::server , c’est ainsi que je configure mon serveur.

 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(); } }; 

Ce qui suit est mon ServerMain.cpp :

 int main(int argc, char** argv) { TestServer ts; try { ts.start_server(); } catch(exception& e) { cerr << e.what() << endl; } return 0; } 

Et ceci est mon 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; } 

Après avoir démarré mon serveur, toute tentative de connexion avec un client entraîne une exception:

unable to connect to '127.0.0.1:4790'

De plus, ni lsof ni netstat montrent de processus en train d’écouter sur le port 4790 . Qu’est-ce que je fais mal?

Je suis sous Mac OS X 10.9.5, compilé avec -std=c++11 -DDLIB_NO_GUI_SUPPORT .

À droite de la documentation de dlib :: server pour start_async (), il est écrit:

 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). 

Ainsi, votre programme serveur se termine immédiatement car vous laissez le programme se terminer (vous quittez main ()). Vous devez faire quelque chose pour maintenir votre programme en vie. Par exemple, appelez le serveur start () au lieu de start_async ().