Skip to content

Commit 30146ce

Browse files
committed
Split out set TCP socket options
1 parent 5634db9 commit 30146ce

File tree

1 file changed

+49
-35
lines changed

1 file changed

+49
-35
lines changed

src/netlog/netlog-network.c

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,51 @@ int manager_network_connect_socket(Manager *m) {
181181
return 0;
182182
}
183183

184+
static int apply_tcp_socket_options(Manager *m){
185+
int r;
186+
187+
assert(m);
188+
assert(m->socket >= 0);
189+
190+
if (m->no_delay) {
191+
r = setsockopt_int(m->socket, IPPROTO_TCP, TCP_NODELAY, true);
192+
if (r < 0)
193+
log_debug_errno(r, "Failed to enable TCP_NODELAY mode, ignoring: %m");
194+
}
195+
196+
if (m->send_buffer > 0) {
197+
r = fd_set_sndbuf(m->socket, m->send_buffer, false);
198+
if (r < 0)
199+
log_debug_errno(r, "TCP: SO_SNDBUF/SO_SNDBUFFORCE failed: %m");
200+
}
201+
202+
if (m->keep_alive) {
203+
r = setsockopt_int(m->socket, SOL_SOCKET, SO_KEEPALIVE, true);
204+
if (r < 0)
205+
log_debug_errno(r, "Failed to enable SO_KEEPALIVE: %m");
206+
}
207+
208+
if (timestamp_is_set(m->keep_alive_time)) {
209+
r = setsockopt_int(m->socket, SOL_TCP, TCP_KEEPIDLE, m->keep_alive_time / USEC_PER_SEC);
210+
if (r < 0)
211+
log_debug_errno(r, "TCP_KEEPIDLE failed: %m");
212+
}
213+
214+
if (m->keep_alive_interval > 0) {
215+
r = setsockopt_int(m->socket, SOL_TCP, TCP_KEEPINTVL, m->keep_alive_interval / USEC_PER_SEC);
216+
if (r < 0)
217+
log_debug_errno(r, "TCP_KEEPINTVL failed: %m");
218+
}
219+
220+
if (m->keep_alive_cnt > 0) {
221+
r = setsockopt_int(m->socket, SOL_TCP, TCP_KEEPCNT, m->keep_alive_cnt);
222+
if (r < 0)
223+
log_debug_errno(r, "TCP_KEEPCNT failed: %m");
224+
}
225+
226+
return 0;
227+
}
228+
184229
int manager_open_network_socket(Manager *m) {
185230
int r;
186231

@@ -218,41 +263,10 @@ int manager_open_network_socket(Manager *m) {
218263

219264
break;
220265
case SYSLOG_TRANSMISSION_PROTOCOL_TCP: {
221-
if (m->no_delay) {
222-
r = setsockopt_int(m->socket, IPPROTO_TCP, TCP_NODELAY, true);
223-
if (r < 0)
224-
log_debug_errno(r, "Failed to enable TCP_NODELAY mode, ignoring: %m");
225-
}
226-
227-
if (m->send_buffer > 0) {
228-
r = fd_set_sndbuf(m->socket, m->send_buffer, false);
229-
if (r < 0)
230-
log_debug_errno(r, "TCP: SO_SNDBUF/SO_SNDBUFFORCE failed: %m");
231-
}
232-
233-
if (m->keep_alive) {
234-
r = setsockopt_int(m->socket, SOL_SOCKET, SO_KEEPALIVE, true);
235-
if (r < 0)
236-
log_debug_errno(r, "Failed to enable SO_KEEPALIVE: %m");
237-
}
238-
239-
if (timestamp_is_set(m->keep_alive_time)) {
240-
r = setsockopt_int(m->socket, SOL_TCP, TCP_KEEPIDLE, m->keep_alive_time / USEC_PER_SEC);
241-
if (r < 0)
242-
log_debug_errno(r, "TCP_KEEPIDLE failed: %m");
243-
}
244-
245-
if (m->keep_alive_interval > 0) {
246-
r = setsockopt_int(m->socket, SOL_TCP, TCP_KEEPINTVL, m->keep_alive_interval / USEC_PER_SEC);
247-
if (r < 0)
248-
log_debug_errno(r, "TCP_KEEPINTVL failed: %m");
249-
}
250-
251-
if (m->keep_alive_cnt > 0) {
252-
r = setsockopt_int(m->socket, SOL_TCP, TCP_KEEPCNT, m->keep_alive_cnt);
253-
if (r < 0)
254-
log_debug_errno(r, "TCP_KEEPCNT failed: %m");
255-
}}
266+
r = apply_tcp_socket_options(m);
267+
if (r < 0)
268+
return r;
269+
}
256270
break;
257271
default:
258272
break;

0 commit comments

Comments
 (0)