int attempt_recieve() { char buffer[DEVICE_STATE_SIZE]; int length; struct timeval start, end; long usec; double intpart; struct timeval timeout; timeout.tv_sec = update_time/1000; timeout.tv_usec = (update_time%1000) * 1000; gettimeofday(&start, NULL); while(1) { if (setsockopt (client_tcp_sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0) { LOGERRNO("setsockopt", "Failed to set timeout for recv socket\n"); sleep(5); } length = recv(client_tcp_sock, buffer, 11, 0); if(length < 0) { if(errno == EAGAIN || errno == EWOULDBLOCK) break; LOGERRNO("recv", "Error when attempt to receive on TCP socket\n"); } else { decode_packet(buffer, length); } gettimeofday(&end, NULL); usec = (end.tv_sec - start.tv_sec)*1000000; usec += end.tv_usec - start.tv_usec; usec = (update_time*1000) - usec; if(usec < 0) break; timeout.tv_sec = (int) usec/1000000; timeout.tv_usec = (long) usec % 1000000; } }
/** * @brief Destructor for the Socket class. */ Socket::~Socket() { UFLAGS_DE( flags ); if ( ::close( m_descriptor ) < 0 ) LOGERRNO( flags, "Socket::~Socket()->close()->" ); return; }
int connectTCP() { // Variable and structure definitions int rc; char *ip; struct hostent *hostp; ip = inet_ntoa(server_addr.sin_addr); // Get a socket descriptor client_tcp_sock = socket(AF_INET, SOCK_STREAM, 0); if(client_tcp_sock < 0) { LOGERRNO("socket", "Unable to create TCP socket to server %s\n", ip); return -1; } else LOGINF(1, "TCP socket created\n"); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(SMARTLET_PORT); if(server_addr.sin_addr.s_addr == (unsigned long)INADDR_NONE) { LOGERR("Server IP address is invalid: %s\n", ip); return -1; } // Attempt to connect to server on TCP socket rc = connect(client_tcp_sock, (struct sockaddr *)&server_addr, sizeof(server_addr)); if(rc < 0) { LOGERRNO("connect", "Unable to connect to server\n"); return -1; } else LOGINF(1, "Connection established...\n"); return 1; }
int deliverMessage(char* in, int size, int i) { int rc; rc = write(client_tcp_sock, in,size);//strlen(in)+1); if(rc <= 0) { LOGERRNO("write", "Unable to send packet to TCP server\n"); return -1; } else { LOGINF(1, "Write success\n"); return 1; } }