{
unsigned short port_number = CNF_GetAcquisitionPort();
int sock_fd;
+ socklen_t addrlen;
sock_fd = socket(family, SOCK_DGRAM, 0);
my_addr.in4.sin_family = family;
my_addr.in4.sin_port = htons(port_number);
my_addr.in4.sin_addr.s_addr = htonl(INADDR_ANY);
+ addrlen = sizeof (my_addr.in4);
break;
#ifdef HAVE_IPV6
case AF_INET6:
my_addr.in6.sin6_family = family;
my_addr.in6.sin6_port = htons(port_number);
my_addr.in6.sin6_addr = in6addr_any;
+ addrlen = sizeof (my_addr.in6);
break;
#endif
default:
assert(0);
}
- if (bind(sock_fd, &my_addr.u, sizeof(my_addr)) < 0) {
+ if (bind(sock_fd, &my_addr.u, addrlen) < 0) {
LOG(LOGS_ERR, LOGF_Acquire, "Could not bind socket : %s\n", strerror(errno));
/* but keep running */
}
double local_time_err;
union sockaddr_in46 his_addr;
int sock_fd;
+ socklen_t addrlen;
#if 0
printf("Sending probe to %s sent=%d samples=%d\n", UTI_IPToString(&src->ip_addr), src->n_probes_sent, src->n_samples);
his_addr.in4.sin_addr.s_addr = htonl(src->ip_addr.addr.in4);
his_addr.in4.sin_port = htons(123); /* Fixed for now */
his_addr.in4.sin_family = AF_INET;
+ addrlen = sizeof (his_addr.in4);
sock_fd = sock_fd4;
break;
#ifdef HAVE_IPV6
sizeof (his_addr.in6.sin6_addr.s6_addr));
his_addr.in6.sin6_port = htons(123); /* Fixed for now */
his_addr.in6.sin6_family = AF_INET6;
+ addrlen = sizeof (his_addr.in6);
sock_fd = sock_fd6;
break;
#endif
if (sendto(sock_fd, (void *) &pkt, NTP_NORMAL_PACKET_SIZE,
0,
- &his_addr.u, sizeof(his_addr)) < 0) {
+ &his_addr.u, addrlen) < 0) {
LOG(LOGS_WARN, LOGF_Acquire, "Could not send to %s : %s",
UTI_IPToString(&src->ip_addr),
strerror(errno));
static int sock_fd;
union sockaddr_in46 his_addr;
+static socklen_t his_addr_len;
static int on_terminal = 0;
his_addr.in4.sin_family = AF_INET;
his_addr.in4.sin_addr.s_addr = htonl(ip.addr.in4);
his_addr.in4.sin_port = htons(port);
+ his_addr_len = sizeof (his_addr.in4);
break;
#ifdef HAVE_IPV6
case IPADDR_INET6:
memcpy(his_addr.in6.sin6_addr.s6_addr, ip.addr.in6,
sizeof (his_addr.in6.sin6_addr.s6_addr));
his_addr.in6.sin6_port = htons(port);
+ his_addr_len = sizeof (his_addr.in6);
break;
#endif
default:
#endif
if (sendto(sock_fd, (void *) request, command_length, 0,
- &his_addr.u, sizeof(his_addr)) < 0) {
+ &his_addr.u, his_addr_len) < 0) {
#if 0
prepare_socket(int family)
{
int port_number, sock_fd;
+ socklen_t my_addr_len;
union sockaddr_in46 my_addr;
IPAddr bind_address;
int on_off = 1;
switch (family) {
case AF_INET:
+ my_addr_len = sizeof (my_addr.in4);
my_addr.in4.sin_family = family;
my_addr.in4.sin_port = htons((unsigned short)port_number);
break;
#ifdef HAVE_IPV6
case AF_INET6:
+ my_addr_len = sizeof (my_addr.in6);
my_addr.in6.sin6_family = family;
my_addr.in6.sin6_port = htons((unsigned short)port_number);
assert(0);
}
- if (bind(sock_fd, &my_addr.u, sizeof(my_addr)) < 0) {
+ if (bind(sock_fd, &my_addr.u, my_addr_len) < 0) {
LOG_FATAL(LOGF_CmdMon, "Could not bind %s command socket : %s",
family == AF_INET ? "IPv4" : "IPv6", strerror(errno));
}
int status;
int tx_message_length;
int sock_fd;
+ socklen_t addrlen;
switch (where_to->u.sa_family) {
case AF_INET:
sock_fd = sock_fd4;
+ addrlen = sizeof (where_to->in4);
break;
#ifdef HAVE_IPV6
case AF_INET6:
sock_fd = sock_fd6;
+ addrlen = sizeof (where_to->in6);
break;
#endif
default:
tx_message_length = PKL_ReplyLength(msg);
status = sendto(sock_fd, (void *) msg, tx_message_length, 0,
- &where_to->u, sizeof(union sockaddr_in46));
+ &where_to->u, addrlen);
if (status < 0) {
unsigned short port;
/* Just send this message again */
tx_message_length = PKL_ReplyLength(prev_tx_message);
status = sendto(sock_fd, (void *) prev_tx_message, tx_message_length, 0,
- (struct sockaddr *) &where_from, sizeof(where_from));
+ &where_from.u, from_length);
if (status < 0) {
LOG(LOGS_WARN, LOGF_CmdMon, "Could not send response to %s:%hu", UTI_IPToString(&remote_ip), remote_port);
}
prepare_socket(int family)
{
union sockaddr_in46 my_addr;
+ socklen_t my_addr_len;
int sock_fd;
unsigned short port_number;
IPAddr bind_address;
switch (family) {
case AF_INET:
+ my_addr_len = sizeof (my_addr.in4);
my_addr.in4.sin_family = family;
my_addr.in4.sin_port = htons(port_number);
break;
#ifdef HAVE_IPV6
case AF_INET6:
+ my_addr_len = sizeof (my_addr.in6);
my_addr.in6.sin6_family = family;
my_addr.in6.sin6_port = htons(port_number);
LOG(LOGS_INFO, LOGF_NtpIO, "Initialising, socket fd=%d", sock_fd);
#endif
- if (bind(sock_fd, &my_addr.u, sizeof(my_addr)) < 0) {
+ if (bind(sock_fd, &my_addr.u, my_addr_len) < 0) {
LOG_FATAL(LOGF_NtpIO, "Could not bind %s NTP socket : %s",
family == AF_INET ? "IPv4" : "IPv6", strerror(errno));
}
char cmsgbuf[256];
int cmsglen;
int sock_fd;
+ socklen_t addrlen;
assert(initialised);
- memset(&remote, 0, sizeof (remote));
switch (remote_addr->ip_addr.family) {
case IPADDR_INET4:
+ memset(&remote.in4, 0, sizeof (remote.in4));
+ addrlen = sizeof (remote.in4);
remote.in4.sin_family = AF_INET;
remote.in4.sin_port = htons(remote_addr->port);
remote.in4.sin_addr.s_addr = htonl(remote_addr->ip_addr.addr.in4);
break;
#ifdef HAVE_IPV6
case IPADDR_INET6:
+ memset(&remote.in6, 0, sizeof (remote.in6));
+ addrlen = sizeof (remote.in6);
remote.in6.sin6_family = AF_INET6;
remote.in6.sin6_port = htons(remote_addr->port);
memcpy(&remote.in6.sin6_addr.s6_addr, &remote_addr->ip_addr.addr.in6,
iov.iov_base = packet;
iov.iov_len = packetlen;
msg.msg_name = &remote.u;
- msg.msg_namelen = sizeof(remote);
+ msg.msg_namelen = addrlen;
msg.msg_iov = &iov;
msg.msg_iovlen = 1;
msg.msg_control = cmsgbuf;
#endif
msg.msg_controllen = cmsglen;
+ /* This is apparently required on some systems */
+ if (!cmsglen)
+ msg.msg_control = NULL;
if (sendmsg(sock_fd, &msg, 0) < 0) {
LOG(LOGS_WARN, LOGF_NtpIO, "Could not send to %s:%d : %s",