mirror of
https://github.com/Stichting-MINIX-Research-Foundation/pkgsrc-ng.git
synced 2025-09-09 12:27:50 -04:00
142 lines
2.8 KiB
Plaintext
142 lines
2.8 KiB
Plaintext
$NetBSD: patch-ag,v 1.5 2001/03/10 22:05:54 tron Exp $
|
|
|
|
--- src/sysdeps.c.orig Tue Dec 29 11:46:52 1998
|
|
+++ src/sysdeps.c Sat Feb 24 23:31:43 2001
|
|
@@ -20,8 +20,8 @@
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
|
|
-#include "server.h"
|
|
#include "sysdeps.h"
|
|
+#include "server.h"
|
|
|
|
#undef PURIFY_HACK
|
|
/*#define PURIFY_HACK*/
|
|
@@ -96,6 +96,9 @@
|
|
#ifdef EINPROGRESS
|
|
err_no == EINPROGRESS ||
|
|
#endif
|
|
+#ifdef EALREADY
|
|
+ err_no == EALREADY ||
|
|
+#endif
|
|
err_no == EAGAIN);
|
|
}
|
|
|
|
@@ -256,10 +259,12 @@
|
|
|
|
/***********************************************************************/
|
|
|
|
+#if !defined(USE_INET6)
|
|
struct SERV_ADDR {
|
|
struct in_addr addr;
|
|
unsigned short port;
|
|
};
|
|
+#endif
|
|
|
|
/*
|
|
* host: either "hostname:port" or "ip.ip.ip.ip:port",
|
|
@@ -271,6 +276,28 @@
|
|
*/
|
|
SERV_ADDR *get_host(char *host, unsigned short def_port, int byte_swap)
|
|
{
|
|
+#if defined(USE_INET6)
|
|
+ char *c, *port, buffer[6];
|
|
+ struct addrinfo hints, *res;
|
|
+
|
|
+ port = 0;
|
|
+ c = strrchr(host, ':');
|
|
+ if (c) {
|
|
+ *c = '\0';
|
|
+ if (c[1] >= '0' && c[1] <= '9')
|
|
+ port = c + 1;
|
|
+ }
|
|
+ if (!port) {
|
|
+ sprintf(buffer, "%d", def_port);
|
|
+ port = buffer;
|
|
+ }
|
|
+
|
|
+ memset(&hints, '\0', sizeof(hints));
|
|
+ hints.ai_family = AF_UNSPEC;
|
|
+ hints.ai_socktype = SOCK_STREAM;
|
|
+ hints.ai_protocol = 0;
|
|
+ return getaddrinfo(host, port, &hints, &res) ? NULL : res;
|
|
+#else
|
|
SERV_ADDR *ret;
|
|
struct in_addr addr;
|
|
unsigned short port;
|
|
@@ -332,14 +359,38 @@
|
|
ret->port = port;
|
|
|
|
return ret;
|
|
+#endif
|
|
}
|
|
|
|
-int open_socket(void)
|
|
+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);
|
|
+#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,8 +423,15 @@
|
|
|
|
int connect_socket(int fd, SERV_ADDR *addr)
|
|
{
|
|
- struct sockaddr_in serv_addr;
|
|
int tmp;
|
|
+#ifdef USE_INET6
|
|
+ do {
|
|
+ tmp = connect(fd, addr->ai_addr, addr->ai_addrlen);
|
|
+ } while (tmp < 0 && errno == EINTR);
|
|
+
|
|
+ return tmp;
|
|
+#else
|
|
+ struct sockaddr_in serv_addr;
|
|
|
|
if (!addr) {
|
|
fputs("knews: connect_socket: addr is NULL!!!\n", stderr);
|
|
@@ -390,6 +448,7 @@
|
|
} while (tmp < 0 && errno == EINTR);
|
|
|
|
return tmp;
|
|
+#endif
|
|
}
|
|
|
|
#if 0 /* Misc stuff for ftp routines */
|
|
@@ -548,7 +607,7 @@
|
|
char *get_mailhostname(void)
|
|
{
|
|
struct utsname un = {{0,},};
|
|
- char *host = NULL, *domain;
|
|
+ char *host = NULL;
|
|
|
|
#ifdef PURIFY_HACK
|
|
return NULL;
|