summaryrefslogtreecommitdiff
path: root/news/knews/patches/patch-ag
diff options
context:
space:
mode:
Diffstat (limited to 'news/knews/patches/patch-ag')
-rw-r--r--news/knews/patches/patch-ag76
1 files changed, 40 insertions, 36 deletions
diff --git a/news/knews/patches/patch-ag b/news/knews/patches/patch-ag
index 0e7aefcfbbb..aa808b74119 100644
--- a/news/knews/patches/patch-ag
+++ b/news/knews/patches/patch-ag
@@ -1,7 +1,7 @@
-$NetBSD: patch-ag,v 1.3 2001/02/23 22:19:42 tron Exp $
+$NetBSD: patch-ag,v 1.4 2001/02/24 22:40:40 tron Exp $
--- src/sysdeps.c.orig Tue Dec 29 11:46:52 1998
-+++ src/sysdeps.c Fri Feb 23 23:11:36 2001
++++ src/sysdeps.c Sat Feb 24 23:31:43 2001
@@ -20,8 +20,8 @@
#include <netinet/in.h>
#include <arpa/inet.h>
@@ -64,7 +64,7 @@ $NetBSD: patch-ag,v 1.3 2001/02/23 22:19:42 tron Exp $
SERV_ADDR *ret;
struct in_addr addr;
unsigned short port;
-@@ -332,14 +359,15 @@
+@@ -332,14 +359,38 @@
ret->port = port;
return ret;
@@ -72,53 +72,57 @@ $NetBSD: patch-ag,v 1.3 2001/02/23 22:19:42 tron Exp $
}
-int open_socket(void)
-+int open_socket(int family)
++SERV_ADDR *next_addr(SERV_ADDR *addr)
++
++{
++#ifdef USE_INET6
++ return addr->ai_next;
++#else
++ return NULL;
++#endif
++}
++void free_addr(SERV_ADDR *addr)
++
++{
++#ifdef USE_INET6
++ freeaddrinfo(addr);
++#else
++ XtFree((char *)addr);
++#endif
++}
++
++int open_socket(SERV_ADDR *addr)
{
int fd, tmp;
do {
- fd = socket(PF_INET, SOCK_STREAM, 0);
-+ fd = socket(family, SOCK_STREAM, 0);
++#ifdef USE_INET6
++ fd = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
++#else
++ fd = socket(AF_INET, SOCK_STREAM, 0);
++#endif
} while (fd < 0 && errno == EINTR);
if (fd < 0) {
-@@ -372,6 +400,35 @@
+@@ -372,8 +423,15 @@
int connect_socket(int fd, SERV_ADDR *addr)
{
+- struct sockaddr_in serv_addr;
+ int tmp;
+#ifdef USE_INET6
-+ int family;
-+
-+ family = AF_INET;
-+ while (addr) {
-+ if (family != addr->ai_family) {
-+ int newsocket;
-+
-+ newsocket = open_socket(addr->ai_family);
-+ if (newsocket < 0)
-+ return -1;
-+ if (dup2(newsocket, fd) < 0)
-+ close(newsocket);
++ do {
++ tmp = connect(fd, addr->ai_addr, addr->ai_addrlen);
++ } while (tmp < 0 && errno == EINTR);
+
-+ close(newsocket);
-+ family = addr->ai_family;
-+ }
-+
-+ do {
-+ if ((connect(fd, addr->ai_addr, addr->ai_addrlen) == 0) ||
-+ (errno == EISCONN))
-+ return 0;
-+ } while (would_block(fd, errno));
-+
-+ addr = addr->ai_next;
-+ }
-+
-+ return -1;
++ return tmp;
+#else
- struct sockaddr_in serv_addr;
- int tmp;
++ struct sockaddr_in serv_addr;
-@@ -390,6 +447,7 @@
+ if (!addr) {
+ fputs("knews: connect_socket: addr is NULL!!!\n", stderr);
+@@ -390,6 +448,7 @@
} while (tmp < 0 && errno == EINTR);
return tmp;
@@ -126,7 +130,7 @@ $NetBSD: patch-ag,v 1.3 2001/02/23 22:19:42 tron Exp $
}
#if 0 /* Misc stuff for ftp routines */
-@@ -548,7 +606,7 @@
+@@ -548,7 +607,7 @@
char *get_mailhostname(void)
{
struct utsname un = {{0,},};