mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 20:24:39 +02:00
wolfio.c: refactor wolfIO_TcpConnect(() to use gethostbyname_r() if GNUC && !SINGLE_THREADED, for thread safety.
This commit is contained in:
22
src/wolfio.c
22
src/wolfio.c
@@ -813,7 +813,13 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec)
|
|||||||
char strPort[6];
|
char strPort[6];
|
||||||
#else
|
#else
|
||||||
#if !defined(WOLFSSL_USE_POPEN_HOST)
|
#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
|
#endif
|
||||||
SOCKADDR_IN *sin;
|
SOCKADDR_IN *sin;
|
||||||
#endif
|
#endif
|
||||||
@@ -910,8 +916,15 @@ int wolfIO_TcpConnect(SOCKET_T* sockfd, const char* ip, word16 port, int to_sec)
|
|||||||
return -1;
|
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
|
#else
|
||||||
entry = gethostbyname(ip);
|
entry = gethostbyname(ip);
|
||||||
|
#endif
|
||||||
sin = (SOCKADDR_IN *)&addr;
|
sin = (SOCKADDR_IN *)&addr;
|
||||||
|
|
||||||
if (entry) {
|
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);
|
sin->sin_port = XHTONS(port);
|
||||||
XMEMCPY(&sin->sin_addr.s_addr, entry->h_addr_list[0], entry->h_length);
|
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");
|
WOLFSSL_MSG("no addr info for responder");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user