From 5368d0d148a35d3da4ee279d053d119832178389 Mon Sep 17 00:00:00 2001 From: Themaister Date: Tue, 24 Jan 2012 23:54:06 +0100 Subject: [PATCH] Attempt to implement gethostbyname for 360. --- netplay_compat.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/netplay_compat.c b/netplay_compat.c index 3695486603..66dd0c9c51 100644 --- a/netplay_compat.c +++ b/netplay_compat.c @@ -46,6 +46,49 @@ #define addrinfo addrinfo_ssnes__ +// Yes, we love shitty implementations, don't we? :( +#ifdef _XBOX +struct hostent +{ + char **h_addr_list; // Just do the minimal needed ... +}; + +static struct hostent *gethostbyname(const char *name) +{ + static struct hostent he; + static struct in_addr addr; + static char *addr_ptr; + + he.h_addr_list = &addr_ptr; + addr_ptr = (char*)&addr; + + if (!name) + return NULL; + + XNDNS *dns = NULL; + WSAEVENT event = WSACreateEvent(); + XNetDnsLookup(name, event, &dns); + if (!dns) + goto error; + + WaitForSingleObject((HANDLE)event, INFINITE); + if (dns->iStatus) + goto error; + + memcpy(&addr, dns->aina, sizeof(addr)); + + WSACloseEvent(event); + XNetDnsRelease(dns); + + return &he; + +error: + if (event) + WSACloseEvent(event); + return NULL; +} +#endif + int getaddrinfo_ssnes__(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)