[Aggregator] Improve UDP socket-related code

This commit is contained in:
Matteo Cypriani 2014-10-31 13:59:52 -04:00
parent c567592167
commit 52106177a1
1 changed files with 28 additions and 3 deletions

View File

@ -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) ;