]> git.armaanb.net Git - sic.git/commitdiff
Update sic/util.c to match sic.c tip.
authorKris Maglione <jg@suckless.org>
Wed, 23 Sep 2009 16:52:13 +0000 (12:52 -0400)
committerKris Maglione <jg@suckless.org>
Wed, 23 Sep 2009 16:52:13 +0000 (12:52 -0400)
kris/sic.c
kris/util.c

index dd120ea50bd61130ab4149cb6eff5e313b3a19e7..7835fec91c77cbff8b6e3d0619b121ee8739beca 100644 (file)
@@ -18,7 +18,7 @@ typedef unsigned short ushort;
 #define PINGTIMEOUT 300
 
 static char*   host = "irc.oftc.net";
 #define PINGTIMEOUT 300
 
 static char*   host = "irc.oftc.net";
-static ushort  port = 6667;
+static char*   port = "ircd";
 static char*   password;
 static char    nick[32];
 
 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) 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);
                        break;
                case 'n':
                        if(++i < argc) strlcpy(nick, argv[i], sizeof nick);
index 53b2fe8920ca91db1f7516be866acba96a29eb4d..33d569337182a0b8a58880a1a5d26a02e2a8cb91 100644 (file)
@@ -21,21 +21,27 @@ eprint(const char *fmt, ...) {
 }
 
 static int
 }
 
 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
 }
 
 #define strlcpy _strlcpy