wolfio.c: refactor wolfIO_TcpConnect(() to use gethostbyname_r() if GNUC && !SINGLE_THREADED, for thread safety.

This commit is contained in:
Daniel Pouzzner
2022-01-20 01:14:51 -06:00
parent 6a56d3e131
commit bb07d0a490

View File

@@ -813,7 +813,13 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec)
char strPort[6];
#else
#if !defined(WOLFSSL_USE_POPEN_HOST)
HOSTENT* entry;
#if defined(__GNUC__) && !defined(SINGLE_THREADED)
HOSTENT entry_buf, *entry = NULL;
char *ghbn_r_buf = NULL;
int ghbn_r_errno;
#else
HOSTENT *entry;
#endif
#endif
SOCKADDR_IN *sin;
#endif
@@ -910,8 +916,15 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec)
return -1;
}
}
#else
#if defined(__GNUC__) && !defined(SINGLE_THREADED)
ghbn_r_buf = (char *)XMALLOC(2048, NULL, DYNAMIC_TYPE_TMP_BUFFER);
if (ghbn_r_buf != NULL) {
gethostbyname_r(ip, &entry_buf, ghbn_r_buf, 2048, &entry, &ghbn_r_errno);
}
#else
entry = gethostbyname(ip);
#endif
sin = (SOCKADDR_IN *)&addr;
if (entry) {
@@ -919,7 +932,12 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec)
sin->sin_port = XHTONS(port);
XMEMCPY(&sin->sin_addr.s_addr, entry->h_addr_list[0], entry->h_length);
}
else {
#if defined(__GNUC__) && !defined(SINGLE_THREADED)
XFREE(ghbn_r_buf, NULL, DYNAMIC_TYPE_TMP_BUFFER);
#endif
if (entry == NULL) {
WOLFSSL_MSG("no addr info for responder");
return -1;
}