URI: 
       Update sic/util.c to match sic.c tip. - sic - simple irc client
  HTML git clone git://git.suckless.org/sic
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 7f1961d4c6c5e326fcb588785f1935e4176a2d01
   DIR parent 2b853804113a01672790aed67cb372d35554b61e
  HTML Author: Kris Maglione <jg@suckless.org>
       Date:   Wed, 23 Sep 2009 12:52:13 -0400
       
       Update sic/util.c to match sic.c tip.
       Diffstat:
         M kris/sic.c                          |       4 ++--
         M kris/util.c                         |      34 ++++++++++++++++++-------------
       
       2 files changed, 22 insertions(+), 16 deletions(-)
       ---
   DIR diff --git a/kris/sic.c b/kris/sic.c
       @@ -18,7 +18,7 @@ typedef unsigned short ushort;
        #define PINGTIMEOUT 300
        
        static char*        host = "irc.oftc.net";
       -static ushort        port = 6667;
       +static char*        port = "ircd";
        static char*        password;
        static char        nick[32];
        
       @@ -150,7 +150,7 @@ main(int argc, char *argv[]) {
                                if(++i < argc) host = argv[i];
                                break;
                        case 'p':
       -                        if(++i < argc) port = atoi(argv[i]);
       +                        if(++i < argc) port = argv[i];
                                break;
                        case 'n':
                                if(++i < argc) strlcpy(nick, argv[i], sizeof nick);
   DIR diff --git a/kris/util.c b/kris/util.c
       @@ -21,21 +21,27 @@ eprint(const char *fmt, ...) {
        }
        
        static int
       -dial(char *host, int port) {
       -        struct hostent *hp;
       -        static struct sockaddr_in addr;
       -        int i;
       +dial(char *host, char *port) {
       +        static struct addrinfo hints;
       +        struct addrinfo *res, *r;
       +        int srv;
        
       -        if((i = socket(AF_INET, SOCK_STREAM, 0)) < 0)
       -                eprint("sic: cannot connect host '%s':", host);
       -        if(nil == (hp = gethostbyname(host)))
       -                eprint("sic: cannot resolve hostname '%s': %s\n", host, hstrerror(h_errno));
       -        addr.sin_family = AF_INET;
       -        addr.sin_port = htons(port);
       -        memcpy(&addr.sin_addr, hp->h_addr, hp->h_length);
       -        if(connect(i, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)))
       -                eprint("sic: cannot connect host '%s':", host);
       -        return i;
       +        memset(&hints, 0, sizeof hints);
       +        hints.ai_family = AF_UNSPEC;
       +        hints.ai_socktype = SOCK_STREAM;
       +        if(getaddrinfo(host, port, &hints, &res) != 0)
       +                eprint("error: cannot resolve hostname '%s':", host);
       +        for(r = res; r; r = r->ai_next) {
       +                if((srv = socket(r->ai_family, r->ai_socktype, r->ai_protocol)) == -1)
       +                        continue;
       +                if(connect(srv, r->ai_addr, r->ai_addrlen) == 0)
       +                        break;
       +                close(srv);
       +        }
       +        freeaddrinfo(res);
       +        if(!r)
       +                eprint("error: cannot connect to host '%s'\n", host);
       +        return srv;
        }
        
        #define strlcpy _strlcpy