add ipv6 support, thanks Evil_Bob - irc - Unnamed repository; edit this file 'description' to name the repository.
 (HTM) git clone git://vernunftzentrum.de/irc.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit f80202802bc1fb4d56f6ce27bcdeaf58d7d1cd1e
 (DIR) parent c3722d014fe734bd6e7cb97cf1352f9822811c97
 (HTM) Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
       Date:   Tue,  9 Aug 2016 19:35:26 -0400
       
       add ipv6 support, thanks Evil_Bob
       
       Diffstat:
         irc.c                               |      46 +++++++++++++++++--------------
       
       1 file changed, 25 insertions(+), 21 deletions(-)
       ---
 (DIR) diff --git a/irc.c b/irc.c
       @@ -30,7 +30,7 @@
        #define PFMT     "  %-12s < %s"
        #define PFMTHIGH "> %-12s < %s"
        #define SRV      "irc.oftc.net"
       -#define PORT     6667
       +#define PORT     "6667"
        
        enum {
                ChanLen = 64,
       @@ -211,25 +211,30 @@ srd(void)
        }
        
        static int
       -dial(const char *host, short port)
       +dial(const char *host, const char *service)
        {
       -        int f;
       -        struct sockaddr_in sin;
       -        struct addrinfo *ai, hai = { 0 };
       -
       -        hai.ai_family = AF_INET;
       -        hai.ai_socktype = SOCK_STREAM;
       -        if (getaddrinfo(host, 0, &hai, &ai))
       -                panic("Cannot resolve host.");
       -        memcpy(&sin, ai->ai_addr, sizeof sin);
       -        sin.sin_port = htons(port);
       -        freeaddrinfo(ai);
       -        f = socket(AF_INET, SOCK_STREAM, 0);
       -        if (f < 0)
       -                panic("Cannot create socket.");
       -        if (connect(f, (struct sockaddr *)&sin, sizeof sin) < 0)
       +        struct addrinfo hints, *res = NULL, *rp;
       +        int fd = -1, e;
       +
       +        memset(&hints, 0, sizeof(hints));
       +        hints.ai_family = AF_UNSPEC;     /* allow IPv4 or IPv6 */
       +        hints.ai_flags = AI_NUMERICSERV; /* avoid name lookup for port */
       +        hints.ai_socktype = SOCK_STREAM;
       +        if ((e = getaddrinfo(host, service, &hints, &res)))
       +                panic("Getaddrinfo failed.");
       +        for (rp = res; rp; rp = rp->ai_next) {
       +                if ((fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) == -1)
       +                        continue;
       +                if (connect(fd, res->ai_addr, res->ai_addrlen) == -1) {
       +                        close(fd);
       +                        continue;
       +                }
       +                break;
       +        }
       +        if (fd == -1)
                        panic("Cannot connect to host.");
       -        return f;
       +        freeaddrinfo(res);
       +        return fd;
        }
        
        static int
       @@ -728,7 +733,7 @@ main(int argc, char *argv[])
                const char *user = getenv("USER");
                const char *ircnick = getenv("IRCNICK");
                const char *server = SRV;
       -        unsigned short port = PORT;
       +        const char *port = PORT;
                int o;
        
                while ((o = getopt(argc, argv, "hn:u:s:p:l:")) >= 0)
       @@ -754,8 +759,7 @@ main(int argc, char *argv[])
                                server = optarg;
                                break;
                        case 'p':
       -                        if (!(port = strtol(optarg, 0, 0)))
       -                                goto usage;
       +                        port = optarg;
                                break;
                        }
                if (!nick[0] && ircnick && strlen(ircnick) < sizeof nick)