@@ -230,6 +230,51 @@ static int MtmReadSocket(int sd, void* buf, int buf_size)
230
230
231
231
232
232
233
+ static void MtmSetSocketOptions (int sd )
234
+ {
235
+ #ifdef TCP_NODELAY
236
+ int optval = 1 ;
237
+ if (setsockopt (sd , IPPROTO_TCP , TCP_NODELAY , (char const * )& optval , sizeof (optval )) < 0 ) {
238
+ elog (WARNING , "Failed to set TCP_NODELAY: %m" );
239
+ }
240
+ #endif
241
+ if (tcp_keepalives_idle ) {
242
+ #ifdef TCP_KEEPIDLE
243
+ if (setsockopt (sd , IPPROTO_TCP , TCP_KEEPIDLE ,
244
+ (char * ) & tcp_keepalives_idle , sizeof (tcp_keepalives_idle )) < 0 )
245
+ {
246
+ elog (WARNING , "Failed to set TCP_KEEPIDLE: %m" );
247
+ }
248
+ #else
249
+ #ifdef TCP_KEEPALIVE
250
+ if (setsockopt (sd , IPPROTO_TCP , TCP_KEEPALIVE ,
251
+ (char * ) & tcp_keepalives_idle , sizeof (tcp_keepalives_idle )) < 0 )
252
+ {
253
+ elog (WARNING , "Failed to set TCP_KEEPALIVE: %m" );
254
+ }
255
+ #endif
256
+ #endif
257
+ }
258
+ #ifdef TCP_KEEPINTVL
259
+ if (tcp_keepalives_interval ) {
260
+ if (setsockopt (sd , IPPROTO_TCP , TCP_KEEPINTVL ,
261
+ (char * ) & tcp_keepalives_interval , sizeof (tcp_keepalives_interval )) < 0 )
262
+ {
263
+ elog (WARNING , "Failed to set TCP_KEEPINTVL: %m" );
264
+ }
265
+ }
266
+ #endif
267
+ #ifdef TCP_KEEPCNT
268
+ if (tcp_keepalives_count ) {
269
+ if (setsockopt (sd , IPPROTO_TCP , TCP_KEEPCNT ,
270
+ (char * ) & tcp_keepalives_count , sizeof (tcp_keepalives_count )) < 0 )
271
+ {
272
+ elog (WARNING , "Failed to set TCP_KEEPCNT: %m" );
273
+ }
274
+ }
275
+ #endif
276
+ }
277
+
233
278
static int MtmConnectSocket (char const * host , int port , int max_attempts )
234
279
{
235
280
struct sockaddr_in sock_inet ;
@@ -274,12 +319,9 @@ static int MtmConnectSocket(char const* host, int port, int max_attempts)
274
319
}
275
320
continue ;
276
321
} else {
277
- int optval = 1 ;
278
322
MtmHandshakeMessage req ;
279
323
MtmArbiterMessage resp ;
280
- setsockopt (sd , IPPROTO_TCP , TCP_NODELAY , (char const * )& optval , sizeof (optval ));
281
- setsockopt (sd , SOL_SOCKET , SO_KEEPALIVE , (char const * )& optval , sizeof (optval ));
282
-
324
+ MtmSetSocketOptions (sd );
283
325
req .hdr .code = MSG_HANDSHAKE ;
284
326
req .hdr .node = MtmNodeId ;
285
327
req .hdr .dxid = HANDSHAKE_MAGIC ;
0 commit comments