mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 13:38:26 +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:
commit
81c080e429
@ -185,11 +185,50 @@ isc__nm_test_lb_socket(sa_family_t sa_family, int protocol) {
|
||||
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_start(isc_mem_t *mctx, uint32_t workers) {
|
||||
isc_nm_t *mgr = NULL;
|
||||
char name[32];
|
||||
|
||||
#ifdef WIN32
|
||||
isc__nm_winsock_initialize();
|
||||
#endif /* WIN32 */
|
||||
|
||||
isc__nm_tls_initialize();
|
||||
|
||||
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,
|
||||
mgr->nworkers * sizeof(isc__networker_t));
|
||||
isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
|
||||
|
||||
#ifdef WIN32
|
||||
isc__nm_winsock_destroy();
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
void
|
||||
@ -2053,8 +2096,10 @@ isc__nm_socket(int domain, int type, int protocol, uv_os_sock_t *sockp) {
|
||||
return (ISC_R_FAMILYNOSUPPORT);
|
||||
default:
|
||||
strerror_r(socket_errno, strbuf, sizeof(strbuf));
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"socket() failed: %s", strbuf);
|
||||
UNEXPECTED_ERROR(
|
||||
__FILE__, __LINE__,
|
||||
"socket() failed with error code %lu: %s",
|
||||
socket_errno, strbuf);
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user