рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк log4cpp рдФрд░ boost.tio рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ NDC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЗрд╕реНрдЯреЗрдб рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (NDC) - рд╡рд╣ рд╕рдВрджрд░реНрдн рдЬреЛ рд▓реЙрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдЧреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдХрдИ рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпреЗ рдСрдкрд░реЗрд╢рди рдЖрдкрд╕ рдореЗрдВ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рд▓рд╛рдирд╛, рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдирд╛, рд╕рдВрджреЗрд╢ рдореЗрдВ рдкреИрдХ рдХрд░рдирд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛, рдЖрджрд┐ ... рдЕрдЧрд░ рдРрд╕реЗ рдХрдИ рдСрдкрд░реЗрд╢рди рд╣реИрдВ рдФрд░ рд╡реЗ рд╕рдорд╛рдирд╛рдВрддрд░ (рдпрд╛ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ) ), рд▓реЙрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрднреА-рдХрднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдПрдирдбреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрд╣рд▓реЗ рд╣рдо рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп (рдЫрджреНрдо) рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд▓реЙрдЧрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ: рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд▓рдХрдбрд╝рд╣рд╛рд░реЗ рдХреЛ рд╕реМрдВрдк рджреЗрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:
- Log4cpp рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ NDC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереНрд░реЗрдб рд▓реЛрдХрд▓ рд╕реНрдЯреЛрд░реЗрдЬ (рдереНрд░реЗрдб рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХ Ptr) рддрдВрддреНрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП NDC рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рд╢реНрди рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдирдбреАрд╕реА рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдкрд░ рдЙрдарддрд╛ рд╣реИ
- рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ: рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдореЗрдВ :: asio :: io_serviceред рдЪреВрдВрдХрд┐ asio рдЖрдкрдХреЛ рдПрдХ (рдпрд╛ рдХрдИ) рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, log4cpp рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг, рд╣рдо рд▓реЙрдЧ рдореЗрдВ рд╕рд╣реА NDC рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗред рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдПрд╕рд┐рдпреЛ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рд╕рд╣реА рдПрдирдбреАрд╕реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛
рддреИрдпрд╛рд░реА рд╢реБрд░реВ рдХрд░реЗрдВ
- CMake-2.8 рдПрдХ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ
- рдмреВрд╕реНрдЯ рдордЯреНрдард╛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗ рдмреВрд╕реНрдЯ -рез.рек реп
- log4cpp - рд▓реЙрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА
- C ++ 11 рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде gcc-4.7.1 (рд╡реИрд░реЗрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)
- рд╕реНрд░реЛрдд рдХреЛрдб asio_log4cpp рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ GitHub рдкрд░ рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
рд╕рд░реНрд╡рд░ рдСрдкрд░реЗрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд:
- рд╕рд░реНрд╡рд░ 12345 рдкреЛрд░реНрдЯ рдкрд░ рдХрд┐рд╕реА рднреА рдкрддреЗ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ
- рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ 0 рд╕реЗ 1000 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдмреВрд╕реНрдЯ.рдмреНрд░рд╛рдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрд░реНрд╕рди рд╡реНрд╣рд░реНрд▓рд╡рд┐рдВрдб рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)
- рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ
- рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
- рдЯрд╛рдЗрдорд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реАрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
рдХреНрд▓рд╛рдЗрдВрдЯ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдкрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 100 рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ 127.0.0.1:12345
- рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкрдврд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛрддрд╛ рд╣реИ
- рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ
- рдЯрд╛рдЗрдорд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рд╡рд┐рджрд╛рдИ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рд╕рдордп рдмрдирд╛рдпрд╛ рдХрд┐ рдПрдирдбреАрд╕реА рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд┐рдо рдирд┐рдпрдВрддреНрд░рдг рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рдПрдХ рд╕рд╣реА рд╕реНрдЯреЙрдк рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдирдбреАрд╕реА рдХреА рд╕рд╣реА рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП)ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред
рд╣рдо рдПрдирдбреАрд╕реА рдХреЗ рдмрд┐рдирд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдпрджрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╕рд░рд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ (рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП) рдХреА рд╕реНрдХреНрд░реАрди рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рджреЗрдЦреЗрдВрдЧреЗ:
17 INFO connection status: system:0, message: Success 17 INFO starting asynchronous reading... ... 33 INFO answer from server readed: [552] 33 INFO starting asynchronous timeout 00:00:00.552000 ... ... 141 INFO timer status: system:0, message: Success 141 INFO starting asynchronous write... 141 INFO write status: system:0, message: Success, bytes written: 8
рд╕рднреА рдСрдкрд░реЗрд╢рдиреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЙрдЧ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд░реАрдб рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджреЗрдЦреЗрдВрдЧреЗ, рдлрд┐рд░ рд╕реНрдЯрд╛рд░реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рдФрд░ рдлрд┐рд░ рд░рд╛рдЗрдЯ рдСрдл рдСрдкрд░реЗрд╢рдВрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рджреЗрдЦреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрд▓рдЧ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдПрдХ рдЕрд▓рдЧ рдХреНрд░рдо рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг
рдкрд╣рд▓реЗ, log4cpp рдореЗрдВ NDC рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рдкреИрдЯрд░реНрдирдХреЙрд▓рдЖрдЙрдЯ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ,
рд╕реЗрдЯрдХреЛрд╡рд░реНрд╕рдирдкреИрдЯрд░реНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ
рд╣реБрдП, рд╣рдо рд╣рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЬрд╛рдирдХрд╛рд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
% X рдкреИрд░рд╛рдореАрдЯрд░ NDC рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (рджреЗрдЦреЗрдВ
consts :: ndcLayoutPattern рдЖрдо рдлрд╝рд╛рдЗрд▓ рдореЗрдВ)
рд╡рд┐рдХрд▓реНрдк # 1
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдЪрд╛рд░ рдорди рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ asio рдХрд┐рд╕реА рднреА
рдХрдВрдкреНрд▓реАрд╢рдирд╣реИрдВрдбрд▓рд░ (рдЬреЛ рдХрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рдХрдореНрдкреНрд▓реАрд╢рдирд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ:
struct NdcHolder : private boost::noncopyable { NdcHolder(const std::string & ndc) { log4cpp::NDC::push(ndc); } ~NdcHolder() { log4cpp::NDC::pop(); } };
рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдлрдВрдХ рдФрд░ ndc рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдврд╝рд╛рд╡рд╛ :: рдмрд╛рдЗрдВрдб, рдпрд╛ рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдирдбреАрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред
рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж NDC рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╣рдо рд▓реЙрдЧ рдореЗрдВ рдЕрдорд╛рдиреНрдп NDC рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рдХрд▓реНрдк # 2
рдПрд╕рд┐рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг
рд╣реИрдВрдбрд▓рд░ рдЗрдирд╡реЛрдХреЗрд╢рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред
рдпрд╣ рддрдВрддреНрд░ рдЖрдкрдХреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣реИрдВрдбрд▓рд░ рдЗрдирд╡реЛрдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА,
рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рд╖реНрдкрд╛рджрдирдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди
рдмреВрд╕реНрдЯ / asio / handler_invoke_hook.hpp рдореЗрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
template <typename Function> inline void asio_handler_invoke(Function function, ...) { function(); }
рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕реЗ
рдмреВрд╕реНрдЯ / asio / рдбрд┐рдЯреЗрд▓ / рд╣реИрдВрдбрд▓рд░_invoke_helpers.hpp рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (
рдереНрд░реЛ рдбреНрд░реЛрд╕реЛрдлрд░реНрд╕ :
template <typename Function, typename Context> inline void invoke(Function& function, Context& context) { using boost::asio::asio_handler_invoke; asio_handler_invoke(function, boost::addressof(context)); }
рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЪреБрдирддреЗ рд╕рдордп рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛ, рдФрд░ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдпрдВ рд╣реИрдВрдбрд▓рд░ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрджрд░реНрдн рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
рдлрд╝рдВрдХреНрд╢рди рдФрд░
рд╕рдВрджрд░реНрдн рд╕рдорд╛рди рд╣реИрдВ (рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рдПрд╕рд┐рдпреЛ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛
рдХрдВрдкреНрд▓реАрд╢рдирд╣реИрдВрдбрд▓рд░ рдФрд░ рдлрд╝рдВрдХреНрд╢рди
asio_handler_invoke рд▓рд┐рдЦрдирд╛ рд╣реИрдЖрдЗрдП рд╣реИрдВрдбрд▓рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
template <typename HandlerT> class NdcDecorator { public: explicit NdcDecorator(HandlerT handler, const std::string & ndc) : mHandler(handler), mNdc(ndc) {} void operator()() { mHandler(); } template <typename Arg1> void operator() (Arg1 arg1) { mHandler(arg1); } template <typename Arg1, typename Arg2> void operator() (Arg1 arg1, Arg2 arg2) { mHandler(arg1, arg2); } const std::string & ndc() const { return mNdc; } private: HandlerT mHandler; std::string mNdc; };
рдЖрд╕рд┐рдпреЛ рдХреЛ рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ () рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред
рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВрдбрд▓рд░ рдкрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдЖрд╡рд░рдг рд╣реИ, рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдПрдирдбреАрд╕реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЗрд╕
рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде
asio_handler_invoke рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
template <typename FunctionT, typename HandlerT> void asio_handler_invoke(FunctionT func, NdcDecorator<HandlerT> * ndcHandler) { NdcHolder ndcHolder(ndcHandler->ndc()); func(); }
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреБрдЪреНрдЫ рд╣реИ: рд╣рдо рдПрдирдбреАрд╕реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП asio рдХреЛ рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдорд┐рдд рд╣реИрдВрдбрд▓рд░ рдЕрднреА рднреА рдкреБрд░рд╛рдиреЗ
asio_handler_invoke рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкрдврд╝рдиреЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
mSocket->async_read_some(to_asio_buffer(mInputMsg), boost::bind(&server_connection::onRead, shared_from(this), placeholders::error, placeholders::bytes_transferred))
рдпрд╣рд╛рдВ рд╣рдо рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рддреЗ рд╣реИрдВ :: рдмрд╛рдЗрдВрдбред рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдЬрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ
NdcDecorator рдореЗрдВ рдмрдиреЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ
рд▓рдкреЗрдЯреЗрдВ :
mSocket->async_read_some(to_asio_buffer(mInputMsg), decorate( boost::bind(&server_connection::onRead, shared_from(this), placeholders::error, placeholders::bytes_transferred)))
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рдкрд░рд┐рд╡рд░реНрддрди рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ - рдЕрд░реНрдерд╛рддреН, рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд╣ рд╕рдВрджрд░реНрдн рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ NDC рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ:
template <typename HandlerT> NdcDecorator<HandlerT> decorate(HandlerT handler, const std::string & ndc = log4cpp::NDC::get()) { return NdcDecorator<HandlerT>(handler, ndc); }
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ: рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рд╣реИ - рдПрдирдбреАрд╕реА рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ред рд╡рд░реНрддрдорд╛рди рдПрдирдбреАрд╕реА рдорд╛рди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рдмрдирдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ - рдЬрдм рдкрд╣рд▓рд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред
рд╣рдо рдПрдирдбреАрд╕реА рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдЕрдм рд╣рдо ndc (рд╕рд░реНрд╡рд░) рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
9179 INFO starting asynchronous write... <SID=1> 9179 INFO starting asynchronous accept... 9179 INFO write status: system:0, message: Success, bytes written: 4 <SID=1> 9179 INFO starting asynchronous timeout 00:00:00.765000 ... <SID=1> ... 9595 INFO read status: system:0, message: Success <SID=3> 9595 INFO answer from client readed: [GOODBYE] <SID=3> 9595 INFO timer status: system:0, message: Success <SID=65> 9595 INFO starting asynchronous read... <SID=65> 9598 INFO read status: system:0, message: Success <SID=12> 9598 INFO answer from client readed: [GOODBYE] <SID=12>
рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдСрдкрд░реЗрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд┐рд╢реНрд░рд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП grep:
cat ndc_server.log | grep "<SID=50>" > 50.log
9199 INFO starting asynchronous write... <SID=50> 9199 INFO write status: system:0, message: Success, bytes written: 4 <SID=50> 9199 INFO starting asynchronous timeout 00:00:00.879000 ... <SID=50> 10079 INFO timer status: system:0, message: Success <SID=50> 10079 INFO starting asynchronous read... <SID=50> 10100 INFO read status: system:0, message: Success <SID=50> 10100 INFO answer from client readed: [GOODBYE] <SID=50>
рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА:
- рдПрд╕рд┐рдпреЛ рдХреЗ рдирдореВрдиреЗ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛