osaf/services/infrastructure/dtms/config/dtmd.conf       |  11 ++++
 osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c |  36 ++++++++--------
 osaf/services/infrastructure/dtms/dtm/dtm_read_config.c  |  15 ++++++
 osaf/services/infrastructure/dtms/include/dtm_cb.h       |   1 +
 4 files changed, 45 insertions(+), 18 deletions(-)


Made TCP_NODELAY configurable to specifi whether MDS TCP
transport should follow the Nagle algorithm for deciding when to send data.By
default, TCP will follow the Nagle algorithm is disable this behavior , can be
configured to TRUE(1) or FALSE(0)

Note :This path is on top of Hans Feldt published   on 4-29-2014 10:58 AM.

diff --git a/osaf/services/infrastructure/dtms/config/dtmd.conf 
b/osaf/services/infrastructure/dtms/config/dtmd.conf
--- a/osaf/services/infrastructure/dtms/config/dtmd.conf
+++ b/osaf/services/infrastructure/dtms/config/dtmd.conf
@@ -85,3 +85,14 @@ DTM_TCP_KEEPALIVE_PROBES=2
 #export MDS_SOCK_SND_RCV_BUF_SIZE=16777216 
 DTM_SOCK_SND_RCV_BUF_SIZE=126976
 
+#
+#Specifies whether MDS TCP transport should follow the Nagle algorithm for
+#deciding when to send data.By default, TCP will follow the Nagle algorithm is 
disable
+#this behavior,MDS TCP transport can enable TCP_NODELAY to force
+#TCP to always send data immediately.For example,TCP_NODELAY should be used
+#when there is an application using TCP for a request/response.
+#This option is only supported for sockets with an address family
+#of AF_INET or AF_INET6 (internode )and type of SOCK_STREAM
+# TRUE(1) or FALSE(0)
+DTM_TCP_NODELAY_FLAG=1
+ 
diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c 
b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
--- a/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
+++ b/osaf/services/infrastructure/dtms/dtm/dtm_node_sockets.c
@@ -577,12 +577,12 @@ int comm_socket_setup_new(DTM_INTERNODE_
                goto done;
        }
 
-        int flag = 1;
-        if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, 
sizeof(flag)) != 0) {
-                LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", 
strerror(errno));
-                dtm_comm_socket_close(&sock_desc);
-                goto done;
-        }
+       int flag = dtms_cb->tcp_nodelay_flag;
+       if (setsockopt(sock_desc, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, 
sizeof(flag)) != 0) {
+               LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", 
strerror(errno));
+               dtm_comm_socket_close(&sock_desc);
+               goto done;
+       }
 
        if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, sock_desc)) {
                LOG_ER("DTM :set_keepalive failed ");
@@ -727,12 +727,12 @@ uint32_t dtm_stream_nonblocking_listener
                LOG_ER("DTM:Socket snd buf size set failed err :%s", 
strerror(errno));
        }
 
-        int flag = 1;
-        if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void 
*)&flag, sizeof(flag)) != 0) {
-                LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", 
strerror(errno));
-                dtm_sockdesc_close(dtms_cb->stream_sock);
-                return NCSCC_RC_FAILURE;
-        }
+       int flag = dtms_cb->tcp_nodelay_flag;
+       if (setsockopt(dtms_cb->stream_sock, IPPROTO_TCP, TCP_NODELAY, (void 
*)&flag, sizeof(flag)) != 0) {
+               LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", 
strerror(errno));
+               dtm_sockdesc_close(dtms_cb->stream_sock);
+               return NCSCC_RC_FAILURE;
+    }
        
        if (set_keepalive(dtms_cb, dtms_cb->stream_sock) != NCSCC_RC_SUCCESS) {
                LOG_ER("DTM : set_keepalive() failed");
@@ -1296,12 +1296,12 @@ int dtm_process_accept(DTM_INTERNODE_CB 
                goto done;
        }
 
-        int flag = 1;
-        if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, 
sizeof(flag)) != 0) {
-                LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", 
strerror(errno));
-                dtm_comm_socket_close(&new_conn_sd);
-                goto done;
-        }
+       int flag = dtms_cb->tcp_nodelay_flag;
+       if (setsockopt(new_conn_sd, IPPROTO_TCP, TCP_NODELAY, (void *)&flag, 
sizeof(flag)) != 0) {
+               LOG_ER("DTM:Socket TCP_NODELAY set failed err :%s", 
strerror(errno));
+               dtm_comm_socket_close(&new_conn_sd);
+               goto done;
+       }
 
        if (NCSCC_RC_SUCCESS != set_keepalive(dtms_cb, new_conn_sd)) {
                LOG_ER("DTM:set_keepalive failed ");
diff --git a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c 
b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
--- a/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
+++ b/osaf/services/infrastructure/dtms/dtm/dtm_read_config.c
@@ -96,6 +96,8 @@ void dtm_print_config(DTM_INTERNODE_CB *
        TRACE("  %d", config->bcast_msg_freq);
        TRACE("  DTM_SOCK_SND_RCV_BUF_SIZE: ");
        TRACE("  %d", config->sock_snd_rcv_buf_size);
+       TRACE("  DTM_TCP_NODELAY_FLAG: ");
+       TRACE("  %d", config->tcp_nodelay_flag);
        TRACE("DTM : ");
 }
 
@@ -223,6 +225,7 @@ int dtm_read_config(DTM_INTERNODE_CB * c
        config->bcast_msg_freq = BCAST_FRE;
        config->initial_dis_timeout = DIS_TIME_OUT;
        config->sock_snd_rcv_buf_size = DTM_SOCK_SND_RCV_BUF_SIZE;
+       config->tcp_nodelay_flag = true;
        config->mcast_flag = false;
        config->scope_link = false;
        config->node_id = m_NCS_GET_NODE_ID;
@@ -439,6 +442,18 @@ int dtm_read_config(DTM_INTERNODE_CB * c
                                tag_len = 0;
 
                        }
+
+                       if (strncmp(line, "DTM_TCP_NODELAY_FLAG=", 
strlen("DTM_TCP_NODELAY_FLAG=")) == 0) {
+                               tag_len = strlen("DTM_TCP_NODELAY_FLAG=");
+                               config->tcp_nodelay_flag = atoi(&line[tag_len]);
+                               if (config->tcp_nodelay_flag < 0 || 
config->tcp_nodelay_flag > 1) {
+                                       LOG_ER("DTM: DTM_TCP_NODELAY_FLAG  
needs to be 0 or 1 of dtmd.conf ");
+                                       return -1;
+                               } 
+                               tag = 0;
+                               tag_len = 0;
+
+                       }
                }
 
                memset(line, 0, DTM_MAX_TAG_LEN);
diff --git a/osaf/services/infrastructure/dtms/include/dtm_cb.h 
b/osaf/services/infrastructure/dtms/include/dtm_cb.h
--- a/osaf/services/infrastructure/dtms/include/dtm_cb.h
+++ b/osaf/services/infrastructure/dtms/include/dtm_cb.h
@@ -91,6 +91,7 @@ typedef struct dtm_internode_cb {
        int comm_keepalive_intvl;
        int comm_keepalive_probes;
        int32_t sock_snd_rcv_buf_size; /* The value of SO_RCVBUF & SO_SNDBUF */
+       uint32_t tcp_nodelay_flag;  /* The value of TCP_NODELAY Flag */
        SYSF_MBX mbx;
        int mbx_fd;
 } DTM_INTERNODE_CB;

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to