gallium/util: replace gethostbyname() with getaddrinfo()
Compiling with MSVC options /we4995 /we4996 (a subset of /sdl) generates a warning that the gethostbyname() function is deprecated in favor of getaddrinfo() or GetAddrInfoW(). Replace the call with getaddrinfo(). Untested. There are no callers to u_socket_connect() in Gallium. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
fee9d05e21
commit
6230773936
|
@ -3,9 +3,11 @@
|
|||
#include "util/u_network.h"
|
||||
#include "util/u_debug.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#if defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||
# include <winsock2.h>
|
||||
# include <windows.h>
|
||||
# include <ws2tcpip.h>
|
||||
#elif defined(PIPE_OS_LINUX) || defined(PIPE_OS_HAIKU) || \
|
||||
defined(PIPE_OS_APPLE) || defined(PIPE_OS_CYGWIN) || defined(PIPE_OS_SOLARIS)
|
||||
# include <sys/socket.h>
|
||||
|
@ -110,28 +112,35 @@ int
|
|||
u_socket_connect(const char *hostname, uint16_t port)
|
||||
{
|
||||
#if defined(PIPE_HAVE_SOCKETS)
|
||||
int s;
|
||||
struct sockaddr_in sa;
|
||||
struct hostent *host = NULL;
|
||||
int s, r;
|
||||
struct addrinfo hints, *addr;
|
||||
char portString[20];
|
||||
|
||||
memset(&sa, 0, sizeof(struct sockaddr_in));
|
||||
host = gethostbyname(hostname);
|
||||
if (!host)
|
||||
return -1;
|
||||
memset(&hints, 0, sizeof hints);
|
||||
hints.ai_family = AF_UNSPEC; // AF_INET or AF_INET6 to force version
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
memcpy((char *)&sa.sin_addr,host->h_addr_list[0],host->h_length);
|
||||
sa.sin_family= host->h_addrtype;
|
||||
sa.sin_port = htons(port);
|
||||
snprintf(portString, sizeof(portString), "%d", port);
|
||||
|
||||
s = socket(host->h_addrtype, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (s < 0)
|
||||
return -1;
|
||||
|
||||
if (connect(s, (struct sockaddr *)&sa, sizeof(sa))) {
|
||||
u_socket_close(s);
|
||||
r = getaddrinfo(hostname, portString, NULL, &addr);
|
||||
if (r != 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
s = socket(addr->ai_family, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (s < 0) {
|
||||
freeaddrinfo(addr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (connect(s, addr->ai_addr, (int) addr->ai_addrlen)) {
|
||||
u_socket_close(s);
|
||||
freeaddrinfo(addr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
freeaddrinfo(addr);
|
||||
|
||||
return s;
|
||||
#else
|
||||
assert(0);
|
||||
|
|
Loading…
Reference in New Issue