diff options
author | FreeArtMan <dos21h@gmail.com> | 2017-02-25 14:00:08 +0000 |
---|---|---|
committer | FreeArtMan <dos21h@gmail.com> | 2017-02-25 14:00:08 +0000 |
commit | 913db4648dabfce65e58a128a35c356ac0042ae9 (patch) | |
tree | 3ab20d68273d9866ef13a521fc857c4a3f577b0a /sock_conn.c | |
parent | fbf4aa43078f95d4ed3de0c9e897711bebf90eac (diff) | |
download | agni-913db4648dabfce65e58a128a35c356ac0042ae9.tar.gz agni-913db4648dabfce65e58a128a35c356ac0042ae9.zip |
joined up socket connection code to main server thread. hardcoded echo/replay command is working
Diffstat (limited to 'sock_conn.c')
-rw-r--r-- | sock_conn.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/sock_conn.c b/sock_conn.c index a57ca7b..b15ce47 100644 --- a/sock_conn.c +++ b/sock_conn.c @@ -27,11 +27,23 @@ irc_buf* irc_buf_create() ret->out_size = 0; ret->max_out_size = IRC_BUF_OUT_SIZE; ret->buf_out = malloc(ret->max_out_size); + if (ret->buf_out == NULL) + { + free(ret); + PERM(); + return NULL; + } memset(ret->buf_out, 0, ret->max_out_size); ret->in_size = 0; ret->max_in_size = IRC_BUF_IN_SIZE; ret->buf_in = malloc(ret->max_in_size); + if (ret->buf_in == NULL) + { + free(ret->buf_out); + free(ret); + return NULL; + } memset(ret->buf_in, 0, ret->max_in_size); ret->ready = 0; @@ -228,15 +240,37 @@ connect to hostname:port return fd>0 if connection succesful int irc_connect( char *hostname, char *port ) { int fd=0; + int fret=-1; struct addrinfo serv, *res; + if (hostname == NULL) + { + PERM(); + return -1; + } + + if (port == NULL) + { + PERM(); + return -1; + } + memset(&serv, 0, sizeof(serv)); serv.ai_family = AF_INET; serv.ai_socktype = SOCK_STREAM; - getaddrinfo(hostname, port, &serv, &res); + if (0 != getaddrinfo(hostname, port, &serv, &res)) + { + PERM(); + return -1; + } fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - connect(fd, res->ai_addr, res->ai_addrlen); + fret = connect(fd, res->ai_addr, res->ai_addrlen); + if (fret!=0) + { + PERM(); + return -1; + } //? //freeaddrinfo(&serv); |