connect req/reply data could be lost without calling 
shutdown on the socket before closing. Update provider
to shutdown socket before closing. Add definition for 
SHUT_RW for windows.

Signed-off-by: Arlin Davis <[email protected]>
---
---
 dapl/openib_scm/dapl_ib_cm.c         |    8 +++++++-
 dapl/openib_scm/windows/openib_osd.h |    1 +
 2 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/dapl/openib_scm/dapl_ib_cm.c b/dapl/openib_scm/dapl_ib_cm.c
index 9cad5be..db0a25b 100644
--- a/dapl/openib_scm/dapl_ib_cm.c
+++ b/dapl/openib_scm/dapl_ib_cm.c
@@ -261,8 +261,10 @@ static void dapli_cm_destroy(struct ib_cm_handle *cm_ptr)
 
        /* cleanup, never made it to work queue */
        if (cm_ptr->state == SCM_INIT) {
-               if (cm_ptr->socket != DAPL_INVALID_SOCKET)
+               if (cm_ptr->socket != DAPL_INVALID_SOCKET) {
+                       shutdown(cm_ptr->socket, SHUT_RDWR);
                        closesocket(cm_ptr->socket);
+               }
                dapl_os_free(cm_ptr, sizeof(*cm_ptr));
                return;
        }
@@ -274,6 +276,7 @@ static void dapli_cm_destroy(struct ib_cm_handle *cm_ptr)
 
        /* close socket if still active */
        if (cm_ptr->socket != DAPL_INVALID_SOCKET) {
+               shutdown(cm_ptr->socket, SHUT_RDWR);
                closesocket(cm_ptr->socket);
                cm_ptr->socket = DAPL_INVALID_SOCKET;
        }
@@ -328,6 +331,7 @@ static DAT_RETURN dapli_socket_disconnect(dp_ib_cm_handle_t 
cm_ptr)
                                dapl_log(DAPL_DBG_TYPE_WARN,
                                         " cm_disc: write error = %s\n",
                                         strerror(errno));
+                       shutdown(cm_ptr->socket, SHUT_RDWR);
                        closesocket(cm_ptr->socket);
                        cm_ptr->socket = DAPL_INVALID_SOCKET;
                }
@@ -1202,6 +1206,7 @@ dapls_ib_remove_conn_listener(IN DAPL_IA * ia_ptr, IN 
DAPL_SP * sp_ptr)
        /* close accepted socket, free cm_srvc_handle and return */
        if (cm_ptr != NULL) {
                if (cm_ptr->socket != DAPL_INVALID_SOCKET) {
+                       shutdown(cm_ptr->socket, SHUT_RDWR);
                        closesocket(cm_ptr->socket);
                        cm_ptr->socket = DAPL_INVALID_SOCKET;
                }
@@ -1305,6 +1310,7 @@ dapls_ib_reject_connection(IN dp_ib_cm_handle_t cm_ptr,
                        writev(cm_ptr->socket, iov, 1);
                }
 
+               shutdown(cm_ptr->socket, SHUT_RDWR);
                closesocket(cm_ptr->socket);
                cm_ptr->socket = DAPL_INVALID_SOCKET;
        }
diff --git a/dapl/openib_scm/windows/openib_osd.h 
b/dapl/openib_scm/windows/openib_osd.h
index 7eb3df3..9b0f089 100644
--- a/dapl/openib_scm/windows/openib_osd.h
+++ b/dapl/openib_scm/windows/openib_osd.h
@@ -16,6 +16,7 @@
 
 #define DAPL_SOCKET SOCKET
 #define DAPL_INVALID_SOCKET INVALID_SOCKET
+#define SHUT_RDWR SD_BOTH
 
 /* allow casting to WSABUF */
 struct iovec
-- 
1.5.2.5


_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to