Diff for /mqtt/src/utils.c between versions 1.1.2.1 and 1.2.2.2

version 1.1.2.1, 2011/11/29 23:31:57 version 1.2.2.2, 2012/04/15 21:44:33
Line 1 Line 1
 #include "global.h"  #include "global.h"
   
   
   int
   srv_Socket(cfg_root_t * __restrict cfg)
   {
           int s = -1, n = 1;
           struct hostent *host;
           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);
   
           host = gethostbyname(AIT_GET_STR(&v));
           AIT_FREE_VAL(&v);
           if (!host) {
                   ioERROR(h_errno, "%s", hstrerror(h_errno));
                   return -1;
           }
           switch (host->h_addrtype) {
                   case AF_INET:
                           sa.sin.sin_len = sizeof(struct sockaddr_in);
                           sa.sin.sin_family = AF_INET;
                           sa.sin.sin_port = htons(port);
                           memcpy(&sa.sin.sin_addr, host->h_addr, sizeof sa.sin.sin_addr);
                           break;
                   case AF_INET6:
                           sa.sin6.sin6_len = sizeof(struct sockaddr_in6);
                           sa.sin6.sin6_family = AF_INET6;
                           sa.sin6.sin6_port = htons(port);
                           memcpy(&sa.sin6.sin6_addr, host->h_addr, sizeof sa.sin6.sin6_addr);
                           break;
                   default:
                           ioERROR(host->h_addrtype, "unsupported socket type");
                           return -1;
           }
   
           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, (struct sockaddr*) &sa.ss, sa.ss.ss_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);
   }

Removed from v.1.1.2.1  
changed lines
  Added in v.1.2.2.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>