#define SWITCH_SO_RCVBUF 128
#define SWITCH_SO_DISCONNECTED 256
#define SWITCH_SO_TCP_NODELAY 512
+#define SWITCH_SO_TCP_KEEPIDLE 520
+#define SWITCH_SO_TCP_KEEPINTVL 530
/**
switch_socket_opt_set(new_sock, SWITCH_SO_KEEPALIVE, 1);
switch_socket_opt_set(new_sock, SWITCH_SO_TCP_NODELAY, 1);
+ switch_socket_opt_set(new_sock, SWITCH_SO_TCP_KEEPIDLE, 30);
+ switch_socket_opt_set(new_sock, SWITCH_SO_TCP_KEEPINTVL, 30);
if (switch_socket_connect(new_sock, sa) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Socket Error!\n");
SWITCH_DECLARE(switch_status_t) switch_socket_opt_set(switch_socket_t *sock, int32_t opt, int32_t on)
{
+ if (opt == SWITCH_SO_TCP_KEEPIDLE) {
+ int r = -10;
+
+#if defined(TCP_KEEPIDLE)
+ r = setsockopt(jsock->client_socket, SOL_TCP, TCP_KEEPIDLE, (void *)&on, sizeof(on));
+#endif
+ if (r == -10) {
+ return SWITCH_STATUS_NOTIMPL;
+ }
+
+
+ return r ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS;
+ }
+
+ if (opt == SWITCH_SO_TCP_KEEPINTVL) {
+ int r = -10;
+
+#if defined(TCP_KEEPINTVL)
+ r = setsockopt(jsock->client_socket, SOL_TCP, TCP_KEEPINTVL, (void *)&on, sizeof(on));
+#endif
+
+ if (r == -10) {
+ return SWITCH_STATUS_NOTIMPL;
+ }
+
+ return r ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS;
+ }
+
return apr_socket_opt_set(sock, opt, on);
}