mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
Merge branch '2328-make-netmgr-initialize-and-cleanup-winsock-itself' into 'main'
Make netmgr initialize and cleanup Winsock itself Closes #2328 See merge request isc-projects/bind9!4458
This commit is contained in:
@@ -185,11 +185,50 @@ isc__nm_test_lb_socket(sa_family_t sa_family, int protocol) {
|
|||||||
return (result == ISC_R_SUCCESS);
|
return (result == ISC_R_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
static void
|
||||||
|
isc__nm_winsock_initialize(void) {
|
||||||
|
WORD wVersionRequested = MAKEWORD(2, 2);
|
||||||
|
WSADATA wsaData;
|
||||||
|
int result;
|
||||||
|
|
||||||
|
result = WSAStartup(wVersionRequested, &wsaData);
|
||||||
|
if (result != 0) {
|
||||||
|
char strbuf[ISC_STRERRORSIZE];
|
||||||
|
strerror_r(result, strbuf, sizeof(strbuf));
|
||||||
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
|
"WSAStartup() failed with error code %lu: %s",
|
||||||
|
result, strbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Confirm that the WinSock DLL supports version 2.2. Note that if the
|
||||||
|
* DLL supports versions greater than 2.2 in addition to 2.2, it will
|
||||||
|
* still return 2.2 in wVersion since that is the version we requested.
|
||||||
|
*/
|
||||||
|
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
|
||||||
|
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||||
|
"Unusable WinSock DLL version: %u.%u",
|
||||||
|
LOBYTE(wsaData.wVersion),
|
||||||
|
HIBYTE(wsaData.wVersion));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
isc__nm_winsock_destroy(void) {
|
||||||
|
WSACleanup();
|
||||||
|
}
|
||||||
|
#endif /* WIN32 */
|
||||||
|
|
||||||
isc_nm_t *
|
isc_nm_t *
|
||||||
isc_nm_start(isc_mem_t *mctx, uint32_t workers) {
|
isc_nm_start(isc_mem_t *mctx, uint32_t workers) {
|
||||||
isc_nm_t *mgr = NULL;
|
isc_nm_t *mgr = NULL;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
isc__nm_winsock_initialize();
|
||||||
|
#endif /* WIN32 */
|
||||||
|
|
||||||
isc__nm_tls_initialize();
|
isc__nm_tls_initialize();
|
||||||
|
|
||||||
if (!isc__nm_test_lb_socket(AF_INET, SOCK_DGRAM) ||
|
if (!isc__nm_test_lb_socket(AF_INET, SOCK_DGRAM) ||
|
||||||
@@ -352,6 +391,10 @@ nm_destroy(isc_nm_t **mgr0) {
|
|||||||
isc_mem_put(mgr->mctx, mgr->workers,
|
isc_mem_put(mgr->mctx, mgr->workers,
|
||||||
mgr->nworkers * sizeof(isc__networker_t));
|
mgr->nworkers * sizeof(isc__networker_t));
|
||||||
isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
|
isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
isc__nm_winsock_destroy();
|
||||||
|
#endif /* WIN32 */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -2053,8 +2096,10 @@ isc__nm_socket(int domain, int type, int protocol, uv_os_sock_t *sockp) {
|
|||||||
return (ISC_R_FAMILYNOSUPPORT);
|
return (ISC_R_FAMILYNOSUPPORT);
|
||||||
default:
|
default:
|
||||||
strerror_r(socket_errno, strbuf, sizeof(strbuf));
|
strerror_r(socket_errno, strbuf, sizeof(strbuf));
|
||||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
UNEXPECTED_ERROR(
|
||||||
"socket() failed: %s", strbuf);
|
__FILE__, __LINE__,
|
||||||
|
"socket() failed with error code %lu: %s",
|
||||||
|
socket_errno, strbuf);
|
||||||
return (ISC_R_UNEXPECTED);
|
return (ISC_R_UNEXPECTED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user