Update sic/util.c to match sic.c tip. - sic - simple irc client | |
git clone git://git.suckless.org/sic | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 7f1961d4c6c5e326fcb588785f1935e4176a2d01 | |
parent 2b853804113a01672790aed67cb372d35554b61e | |
Author: Kris Maglione <[email protected]> | |
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(-) | |
--- | |
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); | |
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, hstrer… | |
- 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)… | |
+ 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 |