chrony/chrony-reconnect.patch
2014-08-15 11:56:28 +02:00

86 lines
2.9 KiB
Diff

diff --git a/ntp_core.c b/ntp_core.c
--- a/ntp_core.c
+++ b/ntp_core.c
@@ -279,12 +332,17 @@ start_initial_timeout(NCR_Instance inst)
/* Mark source active */
SRC_SetActive(inst->source);
+ }
+}
- /* Open client socket */
- if (inst->mode == MODE_CLIENT) {
- assert(inst->local_addr.sock_fd == INVALID_SOCK_FD);
- inst->local_addr.sock_fd = NIO_GetClientSocket(&inst->remote_addr);
- }
+/* ================================================== */
+
+static void
+close_client_socket(NCR_Instance inst)
+{
+ if (inst->mode == MODE_CLIENT && inst->local_addr.sock_fd != INVALID_SOCK_FD) {
+ NIO_CloseClientSocket(inst->local_addr.sock_fd);
+ inst->local_addr.sock_fd = INVALID_SOCK_FD;
}
}
@@ -305,11 +363,7 @@ take_offline(NCR_Instance inst)
/* And inactive */
SRC_UnsetActive(inst->source);
- /* Close client socket */
- if (inst->mode == MODE_CLIENT && inst->local_addr.sock_fd != INVALID_SOCK_FD) {
- NIO_CloseClientSocket(inst->local_addr.sock_fd);
- inst->local_addr.sock_fd = INVALID_SOCK_FD;
- }
+ close_client_socket(inst);
NCR_ResetInstance(inst);
}
@@ -328,7 +382,7 @@ NCR_GetInstance(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourcePar
switch (type) {
case NTP_SERVER:
- /* Client socket will be obtained when timer is started */
+ /* Client socket will be obtained when sending request */
result->local_addr.sock_fd = INVALID_SOCK_FD;
result->mode = MODE_CLIENT;
break;
@@ -758,6 +812,13 @@ transmit_timeout(void *arg)
DEBUG_LOG(LOGF_NtpCore, "Transmit timeout for [%s:%d]",
UTI_IPToString(&inst->remote_addr.ip_addr), inst->remote_addr.port);
+ /* Open new client socket */
+ if (inst->mode == MODE_CLIENT) {
+ close_client_socket(inst);
+ assert(inst->local_addr.sock_fd == INVALID_SOCK_FD);
+ inst->local_addr.sock_fd = NIO_GetClientSocket(&inst->remote_addr);
+ }
+
/* Check whether we need to 'warm up' the link to the other end by
sending an echo exchange to ensure both ends' ARP caches are
primed. On loaded systems this might also help ensure that bits
@@ -1257,6 +1318,10 @@ receive_packet(NTP_Packet *message, struct timeval *now, double now_err, NCR_Ins
adjust_poll(inst, 0.1);
}
+ /* If in client mode, no more packets are expected to be coming from the
+ server and the socket can be closed */
+ close_client_socket(inst);
+
requeue_transmit = 1;
}
diff --git a/ntp_io.c b/ntp_io.c
--- a/ntp_io.c
+++ b/ntp_io.c
@@ -273,7 +266,7 @@ connect_socket(int sock_fd, NTP_Remote_Address *remote_addr)
}
if (connect(sock_fd, &addr.u, addr_len) < 0) {
- LOG(LOGS_ERR, LOGF_NtpIO, "Could not connect NTP socket to %s:%d : %s",
+ DEBUG_LOG(LOGF_NtpIO, "Could not connect NTP socket to %s:%d : %s",
UTI_IPToString(&remote_addr->ip_addr), remote_addr->port,
strerror(errno));
return 0;