Annotation of mqtt/src/utils.c, revision 1.1.2.3

1.1.2.1   misho       1: #include "global.h"
                      2: 
                      3: 
1.1.2.2   misho       4: int
                      5: srv_Socket(sl_config * __restrict cfg)
                      6: {
                      7:        int s = -1, n = 1;
                      8:        struct hostent *host;
                      9:        char szStr[STRSIZ];
                     10:        u_short port;
                     11:        struct sockaddr_storage ss;
                     12:        struct sockaddr_in *sin = (struct sockaddr_in*) &ss;
                     13:        struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) &ss;
                     14: 
1.1.2.3 ! misho      15:        ioTRACE(2);
        !            16: 
1.1.2.2   misho      17:        cfg_LoadAttribute(cfg, CFG("mqttd"), CFG("port"), CFG(szStr), sizeof szStr, MQTT_PORT);
                     18:        port = strtol(szStr, NULL, 0);
                     19:        cfg_LoadAttribute(cfg, CFG("mqttd"), CFG("listen"), CFG(szStr), sizeof szStr, MQTT_HOST);
                     20: 
                     21:        host = gethostbyname(szStr);
                     22:        if (!host) {
                     23:                printf("Error:: resolver #%d - %s\n", h_errno, hstrerror(h_errno));
                     24:                return -1;
                     25:        }
                     26:        switch (host->h_addrtype) {
                     27:                case AF_INET:
                     28:                        sin->sin_len = sizeof(struct sockaddr_in);
                     29:                        sin->sin_family = AF_INET;
                     30:                        sin->sin_port = htons(port);
                     31:                        memcpy(&sin->sin_addr, host->h_addr, sizeof sin->sin_addr);
                     32:                        break;
                     33:                case AF_INET6:
                     34:                        sin6->sin6_len = sizeof(struct sockaddr_in6);
                     35:                        sin6->sin6_family = AF_INET6;
                     36:                        sin6->sin6_port = htons(port);
                     37:                        memcpy(&sin6->sin6_addr, host->h_addr, sizeof sin6->sin6_addr);
                     38:                        break;
                     39:                default:
                     40:                        printf("Error:: unsupported socket type %d\n", host->h_addrtype);
                     41:                        return -1;
                     42:        }
                     43: 
1.1.2.3 ! misho      44:        s = socket(ss.ss_family, SOCK_STREAM, 0);
1.1.2.2   misho      45:        if (s == -1) {
                     46:                printf("Error:: socket() #%d - %s\n", errno, strerror(errno));
                     47:                return -1;
                     48:        }
                     49:        if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof n) == -1) {
                     50:                printf("Error:: setsockopt(SO_REUSEADDR) #%d - %s\n", errno, strerror(errno));
                     51:                close(s);
                     52:                return -1;
                     53:        }
                     54:        if (bind(s, (struct sockaddr*) &ss, ss.ss_len) == -1) {
                     55:                printf("Error:: bind() #%d - %s\n", errno, strerror(errno));
                     56:                close(s);
                     57:                return -1;
                     58:        }
                     59: 
                     60:        return s;
                     61: }
                     62: 
                     63: int
                     64: srv_Close(int s)
                     65: {
1.1.2.3 ! misho      66:        ioTRACE(2);
        !            67: 
        !            68:        if (s > STDERR_FILENO)
        !            69:                shutdown(s, SHUT_RDWR);
        !            70: 
1.1.2.2   misho      71:        return close(s);
                     72: }

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