Changeset: 3db080863222 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3db080863222
Modified Files:
        monetdb5/modules/mal/mal_mapi.c
        tools/merovingian/daemon/client.c
        tools/merovingian/daemon/controlrunner.c
        tools/merovingian/daemon/merovingian.c
        tools/merovingian/daemon/proxy.c
Branch: Jun2016
Log Message:

Shutdown sockets before closing them normally.
Not when an error occurred.
See bug 4066, comment 25.


diffs (55 lines):

diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c
--- a/monetdb5/modules/mal/mal_mapi.c
+++ b/monetdb5/modules/mal/mal_mapi.c
@@ -347,6 +347,7 @@ SERVERlistenThread(SOCKET *Sock)
                                {       int *c_d;
                                        /* filedescriptor, put it in place of 
msgsock */
                                        cmsg = CMSG_FIRSTHDR(&msgh);
+                                       shutdown(msgsock, SHUT_WR);
                                        closesocket(msgsock);
                                        if (!cmsg || cmsg->cmsg_type != 
SCM_RIGHTS) {
                                                fprintf(stderr, 
"!mal_mapi.listen: "
diff --git a/tools/merovingian/daemon/client.c 
b/tools/merovingian/daemon/client.c
--- a/tools/merovingian/daemon/client.c
+++ b/tools/merovingian/daemon/client.c
@@ -573,7 +573,6 @@ acceptConnections(int sock, int usock)
 
 error:
        _mero_keep_listening = 0;
-       shutdown(sock, SHUT_RDWR);
        closesocket(sock);
        return(newErr("accept connection: %s", msg));
 }
diff --git a/tools/merovingian/daemon/controlrunner.c 
b/tools/merovingian/daemon/controlrunner.c
--- a/tools/merovingian/daemon/controlrunner.c
+++ b/tools/merovingian/daemon/controlrunner.c
@@ -978,6 +978,7 @@ controlRunner(void *d)
                snprintf(origin, sizeof(origin), "(local)");
 
                ctl_handle_client(origin, msgsock, NULL, NULL);
+               shutdown(msgsock, SHUT_RDWR);
                closesocket(msgsock);
        } while (_mero_keep_listening);
        shutdown(usock, SHUT_RDWR);
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -850,6 +850,7 @@ main(int argc, char *argv[])
                if (ctid != 0)
                        pthread_join(ctid, NULL);
                if (usock >= 0) {
+                       shutdown(usock, SHUT_RDWR);
                        closesocket(usock);
                        if (dtid != 0)
                                pthread_join(dtid, NULL);
diff --git a/tools/merovingian/daemon/proxy.c b/tools/merovingian/daemon/proxy.c
--- a/tools/merovingian/daemon/proxy.c
+++ b/tools/merovingian/daemon/proxy.c
@@ -179,6 +179,7 @@ startProxy(int psock, stream *cfdin, str
                        closesocket(ssock);
                        return(newErr("could not receive initial byte: %s", 
strerror(errno)));
                }
+               shutdown(ssock, SHUT_RDWR);
                closesocket(ssock);
                /* psock is the underlying socket of cfdin/cfout which we
                 * passed on to the client; we need to close the socket, but
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to