diff options
author | Vic Lee <llyzs@163.com> | 2010-05-30 22:43:46 +0800 |
---|---|---|
committer | Vic Lee <llyzs@163.com> | 2010-05-30 22:43:46 +0800 |
commit | 8a7e0fe8dea1d453ec84281527a3d13e1269492d (patch) | |
tree | eaf2a13e63d5160aeb03d0e871ce302b7667f419 | |
parent | a9957d6417aff61be68117472075ebdd0996542f (diff) |
Fix IPv6 support
-rw-r--r-- | xdmcpclient.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/xdmcpclient.c b/xdmcpclient.c index be27e25..b3d8eae 100644 --- a/xdmcpclient.c +++ b/xdmcpclient.c @@ -185,6 +185,7 @@ XdmcpClientRegisterServer (XdmcpClient *client, const char *host, const char *po struct addrinfo hints; struct addrinfo *res; int error; + int sock; memset (&hints, 0, sizeof (hints)); hints.ai_family = PF_UNSPEC; @@ -197,7 +198,7 @@ XdmcpClientRegisterServer (XdmcpClient *client, const char *host, const char *po while (res) { /* TODO: Somehow gdm does not response on IPv6? will figure it out later */ - if (res->ai_family == AF_INET) + if (res->ai_family == AF_INET || res->ai_family == AF_INET6) { break; } @@ -212,6 +213,14 @@ XdmcpClientRegisterServer (XdmcpClient *client, const char *host, const char *po memmove (&client->Addr, res->ai_addr, res->ai_addrlen); client->AddrLen = res->ai_addrlen; + sock = socket (res->ai_family, SOCK_DGRAM, 0); + if (sock < 0) + { + printf ("Error> failed to create socket.\n"); + return FALSE; + } + client->Sock = sock; + printf ("Client> Server address %s:%s registered.\n", host, port); return TRUE; @@ -221,18 +230,10 @@ XdmcpClient* XdmcpClientNew (int display_number, int timeout) { XdmcpClient *client; - int sock; - - sock = socket (AF_INET, SOCK_DGRAM, 0); - if (sock < 0) - { - printf ("Error> failed to create socket.\n"); - return NULL; - } client = (XdmcpClient*) malloc (sizeof (XdmcpClient)); memset (client, 0, sizeof (XdmcpClient)); - client->Sock = sock; + client->Sock = -1; client->Timeout = timeout; XdmcpClientRegisterAuthen (client, "XDM-AUTHENTICATION-1", "test", 4); @@ -250,7 +251,7 @@ XdmcpClientNew (int display_number, int timeout) void XdmcpClientFree (XdmcpClient *client) { - if (client->Sock > 0) + if (client->Sock >= 0) { close (client->Sock); } |