Skip to content

Commit 9cd12b5

Browse files
authored
Merge pull request #105 from ssahani/misc
TCP: Reconnect to remote server after a reset/closed connection by
2 parents e2a689c + 3ac4722 commit 9cd12b5

File tree

2 files changed

+28
-11
lines changed

2 files changed

+28
-11
lines changed

src/netlog/netlog-manager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ struct Manager {
7878

7979
bool keep_alive;
8080
bool no_delay;
81+
bool connected;
8182

8283
unsigned keep_alive_cnt;
8384

src/netlog/netlog-network.c

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ static int protocol_send(Manager *m, struct iovec *iovec, unsigned n_iovec) {
8686
return r;
8787
}
8888
break;
89+
case SYSLOG_TRANSMISSION_PROTOCOL_TCP:
90+
r = network_send(m, iovec, n_iovec);
91+
if (r < 0 && r != -EAGAIN) {
92+
manager_close_network_socket(m);
93+
return r;
94+
}
95+
break;
8996
default:
9097
return network_send(m, iovec, n_iovec);
9198
}
@@ -297,9 +304,6 @@ int manager_push_to_network(Manager *m,
297304

298305
assert(m);
299306

300-
if (!message)
301-
return 0;
302-
303307
switch (m->protocol) {
304308
case SYSLOG_TRANSMISSION_PROTOCOL_DTLS:
305309
if (!m->dtls->connected) {
@@ -316,6 +320,13 @@ int manager_push_to_network(Manager *m,
316320
return r;
317321
}
318322
break;
323+
case SYSLOG_TRANSMISSION_PROTOCOL_TCP:
324+
if (!m->connected) {
325+
r = manager_open_network_socket(m);
326+
if (r < 0)
327+
return r;
328+
}
329+
break;
319330
default:
320331
break;
321332
}
@@ -340,6 +351,7 @@ void manager_close_network_socket(Manager *m) {
340351
log_error_errno(errno, "Failed to shutdown netlog socket: %m");
341352
}
342353

354+
m->connected = false;
343355
m->socket = safe_close(m->socket);
344356
}
345357

@@ -377,11 +389,16 @@ int manager_network_connect_socket(Manager *m) {
377389
if (r < 0)
378390
return r;
379391

392+
log_debug("Connecting to remote server: '%s'", pretty);
393+
380394
r = connect(m->socket, &m->address.sockaddr.sa, salen);
381395
if (r < 0 && errno != EINPROGRESS)
382-
return log_error_errno(errno, "Failed to connect to remote server='%s'", pretty);
396+
return log_error_errno(errno, "Failed to connect to remote server='%s': %m", pretty);
383397

384-
log_debug("Connected to remote server: '%s'", pretty);
398+
if (errno != EINPROGRESS)
399+
log_debug("Connected to remote server: '%s'", pretty);
400+
else
401+
log_debug("Connection in progress to remote server: '%s'", pretty);
385402

386403
return 0;
387404
}
@@ -407,6 +424,8 @@ int manager_open_network_socket(Manager *m) {
407424
if (m->socket < 0)
408425
return log_error_errno(errno, "Failed to create socket: %m");;
409426

427+
log_debug("Successfully created socket with fd='%d'", m->socket);
428+
410429
switch (m->protocol) {
411430
case SYSLOG_TRANSMISSION_PROTOCOL_UDP: {
412431
r = setsockopt_int(m->socket, IPPROTO_IP, IP_MULTICAST_LOOP, true);
@@ -462,17 +481,14 @@ int manager_open_network_socket(Manager *m) {
462481
}
463482

464483
r = fd_nonblock(m->socket, true);
465-
if (r < 0) {
466-
log_error_errno(errno, "Failed to set socket nonblock: %m");
467-
goto fail;
468-
}
484+
if (r < 0)
485+
log_debug_errno(errno, "Failed to set socket='%d' nonblock: %m", m->socket);
469486

470487
r = manager_network_connect_socket(m);
471488
if (r < 0)
472489
goto fail;
473490

474-
log_debug("Successfully created socket with fd='%d'", m->socket);
475-
491+
m->connected = true;
476492
return m->socket;
477493

478494
fail:

0 commit comments

Comments
 (0)