$NetBSD: patch-ad,v 1.3 2003/01/12 17:53:19 veego Exp $ Index: src/core/network.c =================================================================== RCS file: /home/cvs/irssi/src/core/network.c,v retrieving revision 1.42 retrieving revision 1.44 diff -c -r1.42 -r1.44 *** network.c 26 Aug 2002 19:05:14 -0000 1.42 --- network.c 29 Nov 2002 13:38:21 -0000 1.44 *************** *** 201,210 **** /* set our own address */ if (my_ip != NULL) { sin_set_ip(&so, my_ip); ! if (bind(handle, &so.sa, SIZEOF_SOCKADDR(so)) == -1) { /* failed, set it back to INADDR_ANY */ ! sin_set_ip(&so, NULL); ! bind(handle, &so.sa, SIZEOF_SOCKADDR(so)); } } --- 201,213 ---- /* set our own address */ if (my_ip != NULL) { sin_set_ip(&so, my_ip); ! if (bind(handle, &so.sa, SIZEOF_SOCKADDR(so)) < 0) { /* failed, set it back to INADDR_ANY */ ! int old_errno = errno; ! ! close(handle); ! errno = old_errno; ! return NULL; } } *************** *** 466,498 **** int net_gethostbyaddr(IPADDR *ip, char **name) { #ifdef HAVE_IPV6 ! struct addrinfo req, *ai; int host_error; #else struct hostent *hp; #endif - char ipname[MAX_IP_LEN]; g_return_val_if_fail(ip != NULL, -1); g_return_val_if_fail(name != NULL, -1); - net_ip2host(ip, ipname); - *name = NULL; #ifdef HAVE_IPV6 ! memset(&req, 0, sizeof(struct addrinfo)); ! req.ai_socktype = SOCK_STREAM; ! req.ai_flags = AI_CANONNAME; /* save error to host_error for later use */ ! host_error = getaddrinfo(ipname, NULL, &req, &ai); ! if (host_error != 0) ! return host_error; ! *name = g_strdup(ai->ai_canonname); ! freeaddrinfo(ai); #else ! hp = gethostbyaddr(ipname, strlen(ipname), AF_INET); if (hp == NULL) return -1; *name = g_strdup(hp->h_name); --- 469,499 ---- int net_gethostbyaddr(IPADDR *ip, char **name) { #ifdef HAVE_IPV6 ! union sockaddr_union so; int host_error; + char hostname[NI_MAXHOST]; #else struct hostent *hp; #endif g_return_val_if_fail(ip != NULL, -1); g_return_val_if_fail(name != NULL, -1); *name = NULL; #ifdef HAVE_IPV6 ! memset(&so, 0, sizeof(so)); ! sin_set_ip(&so, ip); /* save error to host_error for later use */ ! host_error = getnameinfo((struct sockaddr *) &so, sizeof(so), ! hostname, sizeof(hostname), NULL, 0, 0); ! if (host_error != 0) ! return host_error; ! *name = g_strdup(hostname); #else ! if (ip->family != AF_INET) return -1; ! hp = gethostbyaddr(&ip->ip, 4, AF_INET); if (hp == NULL) return -1; *name = g_strdup(hp->h_name);