--- libaitio/src/sock.c 2013/08/12 23:19:59 1.1.2.2 +++ libaitio/src/sock.c 2013/08/13 00:02:59 1.1.2.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: sock.c,v 1.1.2.2 2013/08/12 23:19:59 misho Exp $ +* $Id: sock.c,v 1.1.2.4 2013/08/13 00:02:59 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -76,8 +76,14 @@ ioInitSocket(int role, int type, int proto, const char s->sock_role = role; s->sock_type = type; s->sock_proto = proto; - e_gethostbyname(addr, port, &s->sock_addr); - AIT_SET_BUFSIZ(&s->sock_buf, 0, buflen ? buflen : BUFSIZ); + if (!e_gethostbyname(addr, port, &s->sock_addr)) { + io_SetErr(elwix_GetErrno(), "%s", elwix_GetError()); + e_free(s); + return NULL; + } else { + buflen = buflen ? buflen : BUFSIZ; + AIT_SET_BUFSIZ(&s->sock_buf, 0, buflen); + } s->sock_fd = socket(s->sock_addr.sa.sa_family, s->sock_type, s->sock_proto); if (s->sock_fd == -1) { @@ -98,6 +104,12 @@ ioInitSocket(int role, int type, int proto, const char e_free(s); return NULL; } + if (setsockopt(s->sock_fd, SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) == -1) { + LOGERR; + AIT_FREE_VAL(&s->sock_buf); + e_free(s); + return NULL; + } if (bind(s->sock_fd, &s->sock_addr.sa, s->sock_addr.sa.sa_len) == -1) { LOGERR; AIT_FREE_VAL(&s->sock_buf); @@ -105,24 +117,6 @@ ioInitSocket(int role, int type, int proto, const char return NULL; } - switch (s->sock_role) { - case IO_SOCK_TYPE_CLIENT: - break; - case IO_SOCK_TYPE_SERVER: - if (setsockopt(s->sock_fd, SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) == -1) { - LOGERR; - AIT_FREE_VAL(&s->sock_buf); - e_free(s); - return NULL; - } - break; - default: - io_SetErr(EINVAL, "Unsupported socket type"); - AIT_FREE_VAL(&s->sock_buf); - e_free(s); - return NULL; - } - return s; } @@ -163,7 +157,7 @@ ioUpSocket(sock_t * __restrict s, void *arg) return -1; switch (s->sock_role) { - case IO_SOCK_TYPE_CLIENT: + case IO_SOCK_ROLE_CLIENT: memcpy(&s->sock_peer, peer, sizeof s->sock_peer); if (connect(s->sock_fd, &s->sock_peer.sa, @@ -172,12 +166,14 @@ ioUpSocket(sock_t * __restrict s, void *arg) return -1; } break; - case IO_SOCK_TYPE_SERVER: - s->sock_backq = backlog; + case IO_SOCK_ROLE_SERVER: + if (s->sock_type == SOCK_STREAM) { + s->sock_backq = backlog; - if (listen(s->sock_fd, s->sock_backq) == -1) { - LOGERR; - return -1; + if (listen(s->sock_fd, s->sock_backq) == -1) { + LOGERR; + return -1; + } } break; default: