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; }
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; }