Diff for /mqtt/src/utils.c between versions 1.1 and 1.2

version 1.1, 2011/11/29 23:31:57 version 1.2, 2012/01/27 15:05:38
Line 0 Line 1
   #include "global.h"
   
   
   int
   srv_Socket(sl_config * __restrict cfg)
   {
           int s = -1, n = 1;
           struct hostent *host;
           char szStr[STRSIZ];
           u_short port;
           struct sockaddr_storage ss;
           struct sockaddr_in *sin = (struct sockaddr_in*) &ss;
           struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) &ss;
   
           ioTRACE(2);
   
           cfg_LoadAttribute(cfg, CFG("mqttd"), CFG("port"), CFG(szStr), sizeof szStr, MQTT_PORT);
           port = strtol(szStr, NULL, 0);
           cfg_LoadAttribute(cfg, CFG("mqttd"), CFG("listen"), CFG(szStr), sizeof szStr, MQTT_HOST);
   
           host = gethostbyname(szStr);
           if (!host) {
                   printf("Error:: resolver #%d - %s\n", h_errno, hstrerror(h_errno));
                   return -1;
           }
           switch (host->h_addrtype) {
                   case AF_INET:
                           sin->sin_len = sizeof(struct sockaddr_in);
                           sin->sin_family = AF_INET;
                           sin->sin_port = htons(port);
                           memcpy(&sin->sin_addr, host->h_addr, sizeof sin->sin_addr);
                           break;
                   case AF_INET6:
                           sin6->sin6_len = sizeof(struct sockaddr_in6);
                           sin6->sin6_family = AF_INET6;
                           sin6->sin6_port = htons(port);
                           memcpy(&sin6->sin6_addr, host->h_addr, sizeof sin6->sin6_addr);
                           break;
                   default:
                           printf("Error:: unsupported socket type %d\n", host->h_addrtype);
                           return -1;
           }
   
           s = socket(ss.ss_family, SOCK_STREAM, 0);
           if (s == -1) {
                   printf("Error:: socket() #%d - %s\n", errno, strerror(errno));
                   return -1;
           }
           if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) == -1) {
                   printf("Error:: setsockopt(SO_REUSEADDR) #%d - %s\n", errno, strerror(errno));
                   close(s);
                   return -1;
           }
           if (bind(s, (struct sockaddr*) &ss, ss.ss_len) == -1) {
                   printf("Error:: bind() #%d - %s\n", errno, strerror(errno));
                   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  
changed lines
  Added in v.1.2


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