Example #1
0
int  mqtt_network_connect(mqtt_network_t* n, const char* host, int port)
{
    struct sockaddr_in addr;
    int ret;

    if (host2addr(host, &(addr.sin_addr)) != 0)
    {
        return -1;
    }

    addr.sin_family = AF_INET;
    addr.sin_port = htons(port);

    n->my_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if( n->my_socket < 0 )
    {
        // error
        return -1;
    }
    ret = connect(n->my_socket, ( struct sockaddr *)&addr, sizeof(struct sockaddr_in));
    if( ret < 0 )
    {
        // error
        close(n->my_socket);
        return ret;
    }

    return ret;
}
Example #2
0
int send_wol_packet(unsigned char *broadcast_addr, unsigned char *mac_addr)
{
    int sd;
    int optval;
    char unsigned buf[BUFMAX];
    size_t len;
    struct sockaddr_in sin;
    unsigned char mac[MACLEN];
    unsigned char *p;
    int i, j;

    bzero((char *)&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    host2addr((char *)broadcast_addr, &sin.sin_addr, &sin.sin_family);
    sin.sin_port = htons(9);

    if ((sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) {
        fprintf(stderr, "Can't get socket.\n");

        return 1;
    }

    optval = 1;

    if (setsockopt(sd, SOL_SOCKET, SO_BROADCAST, &optval, sizeof(optval)) < 0) {
        fprintf(stderr, "Can't set sockopt: %d.\n", errno);

        return 1;
    }

    p = mac_addr;
    j = hex2(p);

    if (j < 0) {
        MACerror: fprintf(stderr,"Illegal MAC address: %s.\n", mac_addr);

        return 1;
    }

    mac[0] = j;
    p += 2;
    for (i = 1; i < MACLEN; i++) {
        if (*p++ != ':') goto MACerror;

        j = hex2(p);

        if (j < 0) goto MACerror;

        mac[i] = j;
        p += 2;
    }

    p = buf;
    for (i = 0; i < 6; i++) {
        *p++ = 0xFF;
    }

    for (i = 0; i < 16; i++) {
        for (j = 0; j < MACLEN; j++) {
            *p++ = mac[j];
        }
    }

    len = p - buf;

    if (sendto(sd, buf, len, 0, (struct sockaddr*)&sin, sizeof(sin)) != len) {
        fprintf(stderr, "Failed to send: %d.\n", errno);
    }

    return 0;
}