Serwer boost::asio - Dziwne zachowanie kodu

Serwer boost::asio - Dziwne zachowanie kodu
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć. Próbuję stworzyć prosty, asynchroniczny serwer TCP, wzoruje się na pewnym przykładzie z dokumentacji boosta. Konkretnie chodzi mi o ten fragment:

Kopiuj
CServer(IOService, EndPoint);
/*std::list<CServer> Servers;
Servers.emplace_back(IOService, EndPoint);*/

Gdy tworzę ten obiekt normalnie zostaję zaspamowany komunikatem Accepted z funkcji liste, mimo że nawet nic nie próbuje się połączyć, natomiast gdy stworze obiekt przez listę async_accept prawidłowo się blokuje i czeka na connecta. Jaka jest przyczyna takiego zachowania? Czemu normalnie to nie działa?
Dodam że gdy skompiluję jakiś przykład (np. ten - http://think-async.com/Asio/boost_asio_1_10_6/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp) wszystko działa dobrze.

Kod - http://pastebin.com/FxqbXTcx

mlyszczek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 167
0

Co jest w złego w poczciwych socketach BSD, ze aż boosta używasz?

satirev
  • Rejestracja: dni
  • Ostatnio: dni
3

Tworzysz nienazwany obiekt serwera TCP, więc zanim zaczniesz pollować io_service i jakikolwiek event trafi do jego kolejki wywoła się destruktor serwera. W metodzie Listen nie obsługujesz error code, a dostajesz tam ERROR_OPERATION_ABORTED i potem pewnie coś jeszcze.

  • Rejestracja: dni
  • Ostatnio: dni
0

@satirev Wielkie dzięki, nie zwróciłem na to uwagi :D

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.