head 1.2; access; symbols pkgsrc-2026Q1:1.2.0.192 pkgsrc-2026Q1-base:1.2 pkgsrc-2025Q4:1.2.0.190 pkgsrc-2025Q4-base:1.2 pkgsrc-2025Q3:1.2.0.188 pkgsrc-2025Q3-base:1.2 pkgsrc-2025Q2:1.2.0.186 pkgsrc-2025Q2-base:1.2 pkgsrc-2025Q1:1.2.0.184 pkgsrc-2025Q1-base:1.2 pkgsrc-2024Q4:1.2.0.182 pkgsrc-2024Q4-base:1.2 pkgsrc-2024Q3:1.2.0.180 pkgsrc-2024Q3-base:1.2 pkgsrc-2024Q2:1.2.0.178 pkgsrc-2024Q2-base:1.2 pkgsrc-2024Q1:1.2.0.176 pkgsrc-2024Q1-base:1.2 pkgsrc-2023Q4:1.2.0.174 pkgsrc-2023Q4-base:1.2 pkgsrc-2023Q3:1.2.0.172 pkgsrc-2023Q3-base:1.2 pkgsrc-2023Q2:1.2.0.170 pkgsrc-2023Q2-base:1.2 pkgsrc-2023Q1:1.2.0.168 pkgsrc-2023Q1-base:1.2 pkgsrc-2022Q4:1.2.0.166 pkgsrc-2022Q4-base:1.2 pkgsrc-2022Q3:1.2.0.164 pkgsrc-2022Q3-base:1.2 pkgsrc-2022Q2:1.2.0.162 pkgsrc-2022Q2-base:1.2 pkgsrc-2022Q1:1.2.0.160 pkgsrc-2022Q1-base:1.2 pkgsrc-2021Q4:1.2.0.158 pkgsrc-2021Q4-base:1.2 pkgsrc-2021Q3:1.2.0.156 pkgsrc-2021Q3-base:1.2 pkgsrc-2021Q2:1.2.0.154 pkgsrc-2021Q2-base:1.2 pkgsrc-2021Q1:1.2.0.152 pkgsrc-2021Q1-base:1.2 pkgsrc-2020Q4:1.2.0.150 pkgsrc-2020Q4-base:1.2 pkgsrc-2020Q3:1.2.0.148 pkgsrc-2020Q3-base:1.2 pkgsrc-2020Q2:1.2.0.144 pkgsrc-2020Q2-base:1.2 pkgsrc-2020Q1:1.2.0.124 pkgsrc-2020Q1-base:1.2 pkgsrc-2019Q4:1.2.0.146 pkgsrc-2019Q4-base:1.2 pkgsrc-2019Q3:1.2.0.142 pkgsrc-2019Q3-base:1.2 pkgsrc-2019Q2:1.2.0.140 pkgsrc-2019Q2-base:1.2 pkgsrc-2019Q1:1.2.0.138 pkgsrc-2019Q1-base:1.2 pkgsrc-2018Q4:1.2.0.136 pkgsrc-2018Q4-base:1.2 pkgsrc-2018Q3:1.2.0.134 pkgsrc-2018Q3-base:1.2 pkgsrc-2018Q2:1.2.0.132 pkgsrc-2018Q2-base:1.2 pkgsrc-2018Q1:1.2.0.130 pkgsrc-2018Q1-base:1.2 pkgsrc-2017Q4:1.2.0.128 pkgsrc-2017Q4-base:1.2 pkgsrc-2017Q3:1.2.0.126 pkgsrc-2017Q3-base:1.2 pkgsrc-2017Q2:1.2.0.122 pkgsrc-2017Q2-base:1.2 pkgsrc-2017Q1:1.2.0.120 pkgsrc-2017Q1-base:1.2 pkgsrc-2016Q4:1.2.0.118 pkgsrc-2016Q4-base:1.2 pkgsrc-2016Q3:1.2.0.116 pkgsrc-2016Q3-base:1.2 pkgsrc-2016Q2:1.2.0.114 pkgsrc-2016Q2-base:1.2 pkgsrc-2016Q1:1.2.0.112 pkgsrc-2016Q1-base:1.2 pkgsrc-2015Q4:1.2.0.110 pkgsrc-2015Q4-base:1.2 pkgsrc-2015Q3:1.2.0.108 pkgsrc-2015Q3-base:1.2 pkgsrc-2015Q2:1.2.0.106 pkgsrc-2015Q2-base:1.2 pkgsrc-2015Q1:1.2.0.104 pkgsrc-2015Q1-base:1.2 pkgsrc-2014Q4:1.2.0.102 pkgsrc-2014Q4-base:1.2 pkgsrc-2014Q3:1.2.0.100 pkgsrc-2014Q3-base:1.2 pkgsrc-2014Q2:1.2.0.98 pkgsrc-2014Q2-base:1.2 pkgsrc-2014Q1:1.2.0.96 pkgsrc-2014Q1-base:1.2 pkgsrc-2013Q4:1.2.0.94 pkgsrc-2013Q4-base:1.2 pkgsrc-2013Q3:1.2.0.92 pkgsrc-2013Q3-base:1.2 pkgsrc-2013Q2:1.2.0.90 pkgsrc-2013Q2-base:1.2 pkgsrc-2013Q1:1.2.0.88 pkgsrc-2013Q1-base:1.2 pkgsrc-2012Q4:1.2.0.86 pkgsrc-2012Q4-base:1.2 pkgsrc-2012Q3:1.2.0.84 pkgsrc-2012Q3-base:1.2 pkgsrc-2012Q2:1.2.0.82 pkgsrc-2012Q2-base:1.2 pkgsrc-2012Q1:1.2.0.80 pkgsrc-2012Q1-base:1.2 pkgsrc-2011Q4:1.2.0.78 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q3:1.2.0.76 pkgsrc-2011Q3-base:1.2 pkgsrc-2011Q2:1.2.0.74 pkgsrc-2011Q2-base:1.2 pkgsrc-2011Q1:1.2.0.72 pkgsrc-2011Q1-base:1.2 pkgsrc-2010Q4:1.2.0.70 pkgsrc-2010Q4-base:1.2 pkgsrc-2010Q3:1.2.0.68 pkgsrc-2010Q3-base:1.2 pkgsrc-2010Q2:1.2.0.66 pkgsrc-2010Q2-base:1.2 pkgsrc-2010Q1:1.2.0.64 pkgsrc-2010Q1-base:1.2 pkgsrc-2009Q4:1.2.0.62 pkgsrc-2009Q4-base:1.2 pkgsrc-2009Q3:1.2.0.60 pkgsrc-2009Q3-base:1.2 pkgsrc-2009Q2:1.2.0.58 pkgsrc-2009Q2-base:1.2 pkgsrc-2009Q1:1.2.0.56 pkgsrc-2009Q1-base:1.2 pkgsrc-2008Q4:1.2.0.54 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.52 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.50 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.48 pkgsrc-2008Q2-base:1.2 cwrapper:1.2.0.46 pkgsrc-2008Q1:1.2.0.44 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.42 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.40 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.38 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.36 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.34 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.32 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.30 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.28 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.26 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.2.0.24 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.22 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.20 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.18 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.2.0.16 pkgsrc-2004Q3-base:1.2 pkgsrc-2004Q2:1.2.0.14 pkgsrc-2004Q2-base:1.2 pkgsrc-2004Q1:1.2.0.12 pkgsrc-2004Q1-base:1.2 pkgsrc-2003Q4:1.2.0.10 pkgsrc-2003Q4-base:1.2 netbsd-1-6-1:1.2.0.6 netbsd-1-6-1-base:1.2 netbsd-1-6:1.2.0.8 netbsd-1-6-RELEASE-base:1.2 pkgviews:1.2.0.4 pkgviews-base:1.2 buildlink2:1.2.0.2 buildlink2-base:1.2 netbsd-1-5-PATCH003:1.2 netbsd-1-5-PATCH001:1.2 netbsd-1-5-RELEASE:1.2 netbsd-1-4-PATCH003:1.2 netbsd-1-4-PATCH002:1.2 comdex-fall-1999:1.2 netbsd-1-4-PATCH001:1.1 netbsd-1-4-RELEASE:1.1; locks; strict; comment @# @; 1.2 date 99.09.17.18.23.55; author tron; state Exp; branches; next 1.1; 1.1 date 99.02.02.23.00.41; author tron; state Exp; branches; next ; desc @@ 1.2 log @Add IPv6 support supplied by Feico Dillema in PR pkg/8413. @ text @$NetBSD$ --- socket.c.orig Thu Sep 16 13:52:48 1999 +++ socket.c Thu Sep 16 12:54:06 1999 @@@@ -9,6 +9,9 @@@@ #include #include +#ifdef USE_INET6 +#include +#endif /* USE_INET6 */ #include #include #include @@@@ -18,6 +21,8 @@@@ #else #include #endif +#include +#include #include "globals.h" /* global variables */ @@@@ -34,9 +39,17 @@@@ char *progname ; /* name of the game */ char *pipe_program = NULL ; /* program to execute in two-way pipe */ +#ifndef USE_INET6 void server A((int port, char *service_name)) ; -void handle_server_connection A((void)) ; void client A((char *host, int port, char *service_name)) ; +#else /* USE_INET6 */ +void server A((char *port)) ; +void client A((char *host, char *port)) ; +#endif /* USE_INET6 */ + +void handle_server_connection A((void)) ; +extern void init_signals A((void)) ; +extern void do_io A((void)) ; int main(argc, argv) int argc ; @@@@ -46,9 +59,11 @@@@ int opt ; /* option character */ int error = 0 ; /* usage error occurred */ extern int optind ; /* from getopt() */ - char *host ; /* name of remote host */ + /* char *host ; */ /* name of remote host */ +#ifndef USE_INET6 int port ; /* port number for socket */ char *service_name ; /* name of service for port */ +#endif /* USE_INET6 */ /* print version ID if requested */ if (argv[1] && !strcmp(argv[1], "-version")) { @@@@ -58,7 +73,8 @@@@ /* set up progname for later use */ progname = argv[0] ; - if (cp = strrchr(progname, '/')) progname = cp + 1 ; + cp = strrchr(progname, '/'); + if (cp) progname = cp + 1 ; /* parse options */ while ((opt = getopt(argc, argv, "bcflp:qrsvw?")) != -1) { @@@@ -126,6 +142,7 @@@@ /* set up signal handling */ init_signals() ; +#ifndef USE_INET6 /* get port number */ port = resolve_service(argv[optind + 1 - serverflag], "tcp", &service_name) ; @@@@ -134,41 +151,81 @@@@ exit(5) ; } +#endif /* not USE_INET6 */ /* and go */ if (serverflag) { if (backgflag) { background() ; } +#ifndef USE_INET6 server(port, service_name) ; +#else /* USE_INET6 */ + server(argv[optind]) ; +#endif /* USE_INET6 */ } else { +#ifndef USE_INET6 client(argv[optind], port, service_name) ; +#else /* USE_INET6 */ + client(argv[optind], argv[optind + 1]) ; +#endif /* USE_INET6 */ } exit(0) ; } +#ifndef USE_INET6 void server(port, service_name) int port ; char *service_name ; +#else /* USE_INET6 */ +void server(port) +char *port ; +#endif /* USE_INET6 */ { +#ifndef USE_INET6 int socket_handle, alen ; +#else /* USE_INET6 */ + int *socket_handle_list ; +#endif /* USE_INET6 */ /* allocate server socket */ +#ifndef USE_INET6 socket_handle = create_server_socket(port, 1) ; if (socket_handle < 0) { +#else /* USE_INET6 */ + socket_handle_list = create_server_sockets(&port, 1) ; + if (!socket_handle_list) { +#endif /* USE_INET6 */ perror2("server socket") ; exit(1) ; } +#ifdef USE_INET6 + +#endif /* USE_INET6 */ if (verboseflag) { +#ifndef USE_INET6 fprintf(stderr, "listening on port %d", port) ; if (service_name) { fprintf(stderr, " (%s)", service_name) ; } fprintf(stderr, "\n") ; +#else /* USE_INET6 */ + char *ip, *port; + int fd, i; + + fd = socket_handle_list[1]; + for (i = 1; i <= socket_handle_list[0]; i++) { + if (!fd || fd < socket_handle_list[i]) + fd = socket_handle_list[i]; + socket_local_name (fd, NULL, &ip, &port); + fprintf(stderr, "listening at address %s on port %s\n", ip, port) ; + } +#endif /* USE_INET6 */ } /* server loop */ do { +#ifndef USE_INET6 struct sockaddr_in sa ; alen = sizeof(sa) ; @@@@ -185,16 +242,76 @@@@ long norder ; char dotted[20] ; - he = gethostbyaddr(&sa.sin_addr.s_addr, + he = gethostbyaddr((const char *)&sa.sin_addr.s_addr, sizeof(sa.sin_addr.s_addr), AF_INET) ; if (!he) { norder = htonl(sa.sin_addr.s_addr) ; sprintf(dotted, "%d.%d.%d.%d", - (norder >> 24) & 0xff, - (norder >> 16) & 0xff, - (norder >> 8) & 0xff, - norder & 0xff) ; + (int)((norder >> 24) & 0xff), + (int)((norder >> 16) & 0xff), + (int)((norder >> 8) & 0xff), + (int)(norder & 0xff)) ; +#else /* USE_INET6 */ + struct timeval tv; + fd_set readfd; + int fd, i, nfds, retval; + + fd = socket_handle_list[1]; + for (i = 1; i <= socket_handle_list[0]; i++) { + if (!fd || fd < socket_handle_list[i]) + fd = socket_handle_list[i]; + } + nfds=fd+1; + + FD_ZERO(&readfd); + for (i = 1; i <= socket_handle_list[0]; i++) + FD_SET(socket_handle_list[i],&readfd); + + tv.tv_sec = 10; + tv.tv_usec = 0; + + retval = select(nfds, &readfd, NULL, NULL, &tv); + + if(retval!=-1) { + for (i = 1; i <= socket_handle_list[0]; i++) { + fd = socket_handle_list[i]; + if (FD_ISSET(fd, &readfd)) { + + /* accept a connection */ + active_socket = accept(fd, (struct sockaddr *) 0, (int *)0); + if (active_socket == -1) { + perror2("accept") ; + } else { + /* if verbose, get name of peer and give message */ + if (verboseflag) { + char *host, *ip, *port; + + if(!socket_remote_name(active_socket,&host, &ip, &port)) { + fprintf(stderr, "connection from %s at %s to %s\n", host, ip, port); + } + else + fprintf(stderr, "cannot get name or address of peer") ; + } + + if (forkflag) { + switch (fork()) { + case 0: + handle_server_connection() ; + exit(0) ; + case -1: + perror2("fork") ; + break ; + default: + close(active_socket) ; + wait_for_children() ; + } + } else { + handle_server_connection() ; + } + } +#endif /* USE_INET6 */ } +#ifndef USE_INET6 fprintf(stderr, "connection from %s\n", (he ? he->h_name : dotted)) ; } @@@@ -212,9 +329,14 @@@@ } } else { handle_server_connection() ; +#endif /* not USE_INET6 */ } } } while (loopflag) ; +#ifdef USE_INET6 + + free (socket_handle_list); +#endif /* USE_INET6 */ } @@@@ -235,13 +357,25 @@@@ } +#ifndef USE_INET6 void client(host, port, service_name) +#else /* USE_INET6 */ +void client(host, port) +#endif /* USE_INET6 */ char *host ; +#ifndef USE_INET6 int port ; char *service_name ; +#else /* USE_INET6 */ +char *port ; +#endif /* USE_INET6 */ { /* get connection */ +#ifndef USE_INET6 active_socket = create_client_socket(&host, port) ; +#else /* USE_INET6 */ + active_socket = create_client_socket(&host, &port) ; +#endif /* USE_INET6 */ if (active_socket == -1) { perror2("client socket") ; exit(errno) ; @@@@ -250,11 +384,18 @@@@ exit(13) ; } if (verboseflag) { +#ifndef USE_INET6 fprintf(stderr, "connected to %s port %d", host, port) ; if (service_name) { fprintf(stderr, " (%s)", service_name) ; } fprintf(stderr, "\n") ; +#else /* USE_INET6 */ + char *host, *ip, *port; + + socket_local_name (active_socket, &host, &ip, &port); + fprintf(stderr, "connected to %s with address %s at port %s\n", host, ip, port) ; +#endif /* USE_INET6 */ } /* open pipes to program if requested */ @ 1.1 log @Split patches into seperate files and fix compiler warning. @ text @d3 13 a15 3 --- socket.c.orig Wed Sep 9 16:14:34 1992 +++ socket.c Tue Feb 2 23:52:03 1999 @@@@ -18,6 +18,8 @@@@ d24 5 a28 1 @@@@ -37,6 +39,8 @@@@ d30 1 a30 1 void handle_server_connection A((void)) ; d32 6 d43 1 a43 1 @@@@ -46,7 +50,7 @@@@ d49 1 d52 1 d54 3 a56 1 @@@@ -58,7 +62,7 @@@@ d61 2 a62 1 + if ((cp = strrchr(progname, '/'))) progname = cp + 1 ; d66 91 a156 1 @@@@ -185,15 +189,15 @@@@ d161 1 a161 1 + he = gethostbyaddr((char *)&sa.sin_addr.s_addr, d170 63 a232 4 + (int)((norder >> 24) & 0xff), + (int)((norder >> 16) & 0xff), + (int)((norder >> 8) & 0xff), + (int)(norder & 0xff)) ; d234 1 d237 61 @