提交 ed03c461 编写于 作者: R Richard Levitte

Make sure getaddrinfo and getnameinfo works as intended on Windows

Both getaddrinfo() and getnameinfo() have to be preceeded with a call
to BIO_sock_init().

Also, make sure to give gai_strerror() the actual error code.
Reviewed-by: NStephen Henson <steve@openssl.org>
上级 b31feae6
......@@ -214,6 +214,9 @@ unsigned short BIO_ADDR_rawport(const BIO_ADDR *ap)
static int addr_strings(const BIO_ADDR *ap, int numeric,
char **hostname, char **service)
{
if (BIO_sock_init() != 1)
return 0;
if (1) {
#ifdef AI_PASSIVE
int ret = 0;
......@@ -633,7 +636,11 @@ int BIO_lookup(const char *host, const char *service,
}
#endif
if (BIO_sock_init() != 1)
return 0;
if (1) {
int gai_ret = 0;
#ifdef AI_PASSIVE
struct addrinfo hints;
......@@ -655,7 +662,7 @@ int BIO_lookup(const char *host, const char *service,
/* Note that |res| SHOULD be a 'struct addrinfo **' thanks to
* macro magic in bio_lcl.h
*/
switch (getaddrinfo(host, service, &hints, res)) {
switch ((gai_ret = getaddrinfo(host, service, &hints, res))) {
# ifdef EAI_SYSTEM
case EAI_SYSTEM:
SYSerr(SYS_F_GETADDRINFO, get_last_socket_error());
......@@ -667,7 +674,7 @@ int BIO_lookup(const char *host, const char *service,
break;
default:
BIOerr(BIO_F_BIO_LOOKUP, ERR_R_SYS_LIB);
ERR_add_error_data(1, gai_strerror(ret));
ERR_add_error_data(1, gai_strerror(gai_ret));
break;
}
} else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册