diff options
| author | Lopin <davca.hr@seznam.cz> | 2011-06-23 11:57:14 +0200 |
|---|---|---|
| committer | Lopin <davca.hr@seznam.cz> | 2011-06-23 11:57:14 +0200 |
| commit | 9d9472e5cc2f761fbc93f8f0e87903898bf48b91 (patch) | |
| tree | 0858a86b83e9d4fd7681e692a4ad8da8447e696c /src/server/authserver | |
| parent | 550635ac85961fbd092bb8efb093252cf83954b4 (diff) | |
| parent | d65e1d9a3fc7d597425d6b1fed76d07b22d6008c (diff) | |
Merge branch 'master' of https://github.com/TrinityCore/TrinityCore
Diffstat (limited to 'src/server/authserver')
| -rwxr-xr-x | src/server/authserver/Server/RealmAcceptor.h | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/server/authserver/Server/RealmAcceptor.h b/src/server/authserver/Server/RealmAcceptor.h index a245c7914f5..99817dfddac 100755 --- a/src/server/authserver/Server/RealmAcceptor.h +++ b/src/server/authserver/Server/RealmAcceptor.h @@ -29,7 +29,11 @@ class RealmAcceptor : public ACE_Acceptor<RealmSocket, ACE_SOCK_Acceptor> { public: RealmAcceptor(void) { } - virtual ~RealmAcceptor(void) { } + virtual ~RealmAcceptor(void) + { + if (reactor()) + reactor()->cancel_timer(this, 1); + } protected: virtual int make_svc_handler(RealmSocket *&sh) @@ -41,6 +45,26 @@ protected: sh->set_session(new AuthSocket(*sh)); return 0; } + + virtual int handle_timeout(const ACE_Time_Value& /*current_time*/, const void* /*act = 0*/) + { + sLog->outBasic("Resuming acceptor"); + reactor()->cancel_timer(this, 1); + return reactor()->register_handler(this, ACE_Event_Handler::ACCEPT_MASK); + } + + virtual int handle_accept_error(void) + { +#if defined(ENFILE) && defined(EMFILE) + if (errno == ENFILE || errno == EMFILE) + { + sLog->outError("Out of file descriptors, suspending incoming connections for 10 seconds"); + reactor()->remove_handler(this, ACE_Event_Handler::ACCEPT_MASK | ACE_Event_Handler::DONT_CALL); + reactor()->schedule_timer(this, NULL, ACE_Time_Value(10)); + } +#endif + return 0; + } }; #endif |
