diff --git a/owlps-aggregator/owlps-aggregatord.c b/owlps-aggregator/owlps-aggregatord.c index 8a63773..575ad95 100644 --- a/owlps-aggregator/owlps-aggregatord.c +++ b/owlps-aggregator/owlps-aggregatord.c @@ -860,6 +860,13 @@ void* monitor_requests(void *const NULL_value) if (VERBOSE_WARNING) fprintf(stderr, "Monitor requests thread launched.\n") ; + /* Open the socket to the positioning server + * We don't need to check wether or not the socket was opened + * successfuly because the network transmission is not mandatory + * (aggregated data will be written to the output file + * anyway). owl_close_fd() and the rest of the code here handle + * negative file descriptors. + */ sockfd = owl_create_udp_trx_socket(cfg_getstr(cfg, "positioner_host"), cfg_getint(cfg, "positioner_port"), @@ -1020,7 +1027,8 @@ void flush_request_list(FILE *const stream, * Parameters: * - request_ptr: the request to print * - stream: the stream to print to - * - sockfd: the file descriptor of the socket to send to + * - sockfd: the file descriptor of the socket to send to (can be + * negative, in which case no transmission will be attempted) * - serv: the server's information */ void output_request(request_list *const request_ptr, @@ -1082,7 +1090,13 @@ void output_request(request_list *const request_ptr, } request.nb_info = htons(request.nb_info) ; // Send the request's main data: - sendto(sockfd, &request, sizeof(request), 0, serv, serv_len) ; + if (sockfd >= 0) + { + ssize_t n; + n = sendto(sockfd, &request, sizeof(request), 0, serv, serv_len); + if (n != sizeof(request)) + perror("Couldn't send the request's main data"); + } // Send request's per-CP information to the server and delete it // from the request @@ -1096,7 +1110,13 @@ void output_request(request_list *const request_ptr, info.capture_time = request_info_ptr->capture_time ; owl_hton_timestamp(&info.capture_time) ; info.ss_dbm = request_info_ptr->ss_dbm ; - sendto(sockfd, &info, sizeof(info), 0, serv, serv_len) ; + if (sockfd >= 0) + { + ssize_t n; + n = sendto(sockfd, &info, sizeof(info), 0, serv, serv_len); + if (n != sizeof(info)) + perror("Couldn't send the CP information"); + } // Print CP info to the output file owl_mac_bytes_to_string_r(request_info_ptr->cp_mac_addr_bytes, @@ -1497,6 +1517,11 @@ void order_send(const cp_list *const cp) cfg_getint(cfg, "autocalibration_order_port"), &serv) ; + if (sockfd < 0) + { + fprintf(stderr, "Can't transmit autocalibration order.\n"); + return; + } message.order = AUTOCALIBRATION_ORDER_SEND ; nsent = sendto(sockfd, &message, sizeof(message), 0, &serv, serv_len) ;