--- mqtt/src/utils.c 2011/11/29 23:31:57 1.1.2.1 +++ mqtt/src/utils.c 2012/04/24 08:06:09 1.2.2.3 @@ -1,3 +1,53 @@ #include "global.h" +int +srv_Socket(cfg_root_t * __restrict cfg) +{ + int s = -1, n = 1; + ait_val_t v; + u_short port; + io_sockaddr_t sa; + + ioTRACE(2); + + cfg_loadAttribute(cfg, "mqttd", "port", &v, MQTT_PORT); + port = strtol(AIT_GET_STR(&v), NULL, 0); + AIT_FREE_VAL(&v); + cfg_loadAttribute(cfg, "mqttd", "listen", &v, MQTT_HOST); + if (!io_gethostbyname(AIT_GET_STR(&v), port, &sa)) { + ioLIBERR(io); + AIT_FREE_VAL(&v); + return -1; + } else + AIT_FREE_VAL(&v); + + s = socket(sa.ss.ss_family, SOCK_STREAM, 0); + if (s == -1) { + ioSYSERR(0); + return -1; + } + if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) == -1) { + ioSYSERR(0); + close(s); + return -1; + } + if (bind(s, &sa.sa, sa.sa.sa_len) == -1) { + ioSYSERR(0); + close(s); + return -1; + } + + return s; +} + +int +srv_Close(int s) +{ + ioTRACE(2); + + if (s > STDERR_FILENO) + shutdown(s, SHUT_RDWR); + + return close(s); +}