@@ -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+
184229int 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