From fd815672cbc4bd4a1c07c0201f5f9e2b97d87a2a Mon Sep 17 00:00:00 2001 From: "U-DESKTOP-5UMITBO\\wpk" Date: Wed, 15 Jan 2020 12:16:03 +0100 Subject: [PATCH] xxx --- lib/isc/netmgr/netmgr-int.h | 9 +++++---- lib/isc/netmgr/tcp.c | 16 +++++++++++++--- lib/isc/netmgr/uv-compat.c | 35 +++++++++++++++++++++++++++++------ 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h index 1930927a5e1..cf9478f171f 100644 --- a/lib/isc/netmgr/netmgr-int.h +++ b/lib/isc/netmgr/netmgr-int.h @@ -245,10 +245,11 @@ typedef isc__netievent_t isc__netievent_shutdown_t; typedef isc__netievent_t isc__netievent_stop_t; typedef union { - isc__netievent_t ni; - isc__netievent__socket_t nis; - isc__netievent__socket_req_t nisr; - isc__netievent_udpsend_t nius; + isc__netievent_t ni; + isc__netievent__socket_t nis; + isc__netievent__socket_req_t nisr; + isc__netievent_udpsend_t nius; + isc__netievent__socket_streaminfo_t niss; } isc__netievent_storage_t; /* diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index b884772e7b2..84d312616b2 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -295,7 +295,8 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) { event = isc__nm_get_ievent(csock->mgr, netievent_tcpchildlisten); - isc_uv_export(&sock->uv_handle.stream, &event->streaminfo); + int r = isc_uv_export(&sock->uv_handle.stream, &event->streaminfo); + RUNTIME_CHECK(r == 0); event->sock = csock; if (csock->tid == isc_nm_tid()) { isc__nm_async_tcpchildlisten(&sock->mgr->workers[i], @@ -334,11 +335,17 @@ isc__nm_async_tcpchildlisten(isc__networker_t *worker, isc__netievent_t *ev0) { uv_tcp_init(&worker->loop, (uv_tcp_t *) &sock->uv_handle.tcp); uv_handle_set_data(&sock->uv_handle.handle, sock); - isc_uv_import(&sock->uv_handle.stream, &ievent->streaminfo); + r = isc_uv_import(&sock->uv_handle.stream, &ievent->streaminfo); + if (r != 0) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, + "uv_import failed: %s", + isc_result_totext(isc__nm_uverr2result(r))); + return; + } r = uv_listen((uv_stream_t *) &sock->uv_handle.tcp, sock->backlog, tcp_connection_cb); - if (r != 0) { isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, @@ -768,6 +775,9 @@ tcp_connection_cb(uv_stream_t *server, int status) { isc_result_t result; UNUSED(status); + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, + "TCP connection cb"); result = accept_connection(ssock); if (result != ISC_R_SUCCESS) { diff --git a/lib/isc/netmgr/uv-compat.c b/lib/isc/netmgr/uv-compat.c index 101c3c7201c..b7b22a45de4 100644 --- a/lib/isc/netmgr/uv-compat.c +++ b/lib/isc/netmgr/uv-compat.c @@ -10,6 +10,7 @@ */ #include +#include #include "uv-compat.h" /* @@ -35,21 +36,42 @@ typedef struct { int uv__tcp_xfer_import(uv_tcp_t *tcp, uv__ipc_socket_xfer_type_t xfer_type, uv__ipc_socket_xfer_info_t *xfer_info); + int -uv__tcp_xfer_export(uv_tcp_t *handle, int pid, - uv__ipc_socket_xfer_info_t *xfer_info); +uv__tcp_xfer_export(uv_tcp_t* handle, + int target_pid, + uv__ipc_socket_xfer_type_t* xfer_type, + uv__ipc_socket_xfer_info_t* xfer_info); int isc_uv_export(uv_stream_t *stream, isc_uv_stream_info_t *info) { + uv__ipc_socket_xfer_info_t xfer_info; + uv__ipc_socket_xfer_type_t xfer_type; + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, + "uv_export sizeofs 1 %d 2 %d", sizeof(isc_uv_stream_info_t), sizeof(uv__ipc_socket_xfer_info_t)); if (stream->type != UV_TCP) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, + "uv_export failed: stream not tcp"); return (-1); } - if (uv__tcp_xfer_export((uv_tcp_t *) stream, GetCurrentProcessId(), - &info->socket_info) == -1) { - return (-1); + int r = uv__tcp_xfer_export((uv_tcp_t *) stream, GetCurrentProcessId(), &xfer_type, &xfer_info); + if (r != 0) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, + "uv_export failed: result %d", r); + return (r); + } + if (xfer_info.delayed_error != 0) { + isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, + ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, + "uv_export failed: delayed error %d", xfer_info.delayed_error); + return (xfer_info.delayed_error); } - info->type = UV_TCP; + info->socket_info = xfer_info.socket_info; + return (0); } int @@ -59,6 +81,7 @@ isc_uv_import(uv_stream_t *stream, isc_uv_stream_info_t *info) { if (stream->type != UV_TCP || info->type != UV_TCP) { return (-1); } + xfer_info.delayed_error = 0; xfer_info.socket_info = info->socket_info; return (uv__tcp_xfer_import((uv_tcp_t *) stream, -- 2.47.3