75 const string& message,
79 message +
": " + uv_strerror(uv_err_code), severity),
93 static void s_walk(uv_handle_t* handle,
void* arg) {
94 std::function<void(uv_handle_t* handle)> *cb =
static_cast<std::function<
void(uv_handle_t* handle)
>*>(arg);
103 int rc = uv_loop_init(&
m_loop);
119 rc = uv_run(&
m_loop, UV_RUN_DEFAULT);
122 rc = uv_loop_close(&
m_loop);
124 PSG_TRACE(
"uv_loop_close returned " << rc);
135 void Walk(std::function<
void(uv_handle_t* handle)> cb) {
154 rc = uv_signal_init(loop, &
m_sig);
173 uv_signal_stop(&
m_sig);
179 uv_signal_stop(&
m_sig);
182 uv_close(
reinterpret_cast<uv_handle_t*
>(&
m_sig),
NULL);
199 uv_handle_t *handle =
reinterpret_cast<uv_handle_t*
>(&
m_tcp);
204 uv_run(handle->loop, UV_RUN_ONCE);
208 uv_close(handle, close_cb);
227 rc = uv_tcp_init(loop, &
m_tcp);
238 uv_tcp_nodelay(&
m_tcp,
set ? 1 : 0);
243 uv_tcp_keepalive(&
m_tcp,
set ? 1 : 0, 120);
251 void Bind(
const char* addr,
unsigned int port) {
253 std::stringstream ss;
254 struct sockaddr_in addr_in;
256 e = uv_ip4_addr(addr, port, &addr_in);
259 ss << (e == EINVAL ?
"invalid" :
"failed to parse") <<
" address/port: " << addr <<
':' << port;
263 e = uv_tcp_bind(&
m_tcp,
reinterpret_cast<struct sockaddr*
>(&addr_in), 0);
264 if (e != 0 || errno == EADDRINUSE) {
265 ss <<
"failed to bind socket to address/port: " << addr <<
':' << port;
269 void Close(
void (*close_cb)(uv_handle_t* handle)) {
275 uv_read_stop(
reinterpret_cast<uv_stream_t*
>(&
m_tcp));
Incapsulate compile time information such as __FILE__, __LINE__, NCBI_MODULE, current function.
NCBI_EXCEPTION_DEFAULT(CUvBaseException, CException)
const char * GetErrCodeString(void) const override
Get error code interpreted as text.
CUvException(const CDiagCompileInfo &info, const CException *prev_exception, EErrCode err_code, const string &message, int uv_err_code, EDiagSev severity=eDiag_Error) const char GetErrCodeString)() const override
void Walk(std::function< void(uv_handle_t *handle)> cb)
static void s_walk(uv_handle_t *handle, void *arg)
void Start(int signum, uv_signal_cb cb)
CUvSignal(uv_loop_t *loop)
void Bind(const char *addr, unsigned int port)
void Init(uv_loop_t *loop)
void Close(void(*close_cb)(uv_handle_t *handle))
void InternalClose(void(*close_cb)(uv_handle_t *handle), bool from_dtor)
static void s_close_cb(uv_handle_t *handle)
EDiagSev
Severity level for the posted diagnostics.
@ eDiag_Error
Error message.
TErrCode GetErrCode(void) const
Get error code.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
#define NCBI_THROW2(exception_class, err_code, message, extra)
Throw exception with extra parameter.
EErrCode
Error types that an application can generate.
#define NCBI_EXCEPTION_DEFAULT_IMPLEMENTATION(exception_class, base_class)
Helper macro for default exception implementation.
virtual const char * GetErrCodeString(void) const
Get error code interpreted as text.
Multi-threading – mutexes; rw-locks; semaphore.
#define PSG_TRACE(message)