Update of /cvsroot/monetdb/sql/src/backends/monet5/merovingian
In directory sfp-cvsdas-1.v30.ch3.sourceforge.com:/tmp/cvs-serv23952

Modified Files:
        merovingian_proxy.c 
Log Message:
Add support for UNIX domain socket connections

Index: merovingian_proxy.c
===================================================================
RCS file: 
/cvsroot/monetdb/sql/src/backends/monet5/merovingian/merovingian_proxy.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- merovingian_proxy.c 7 Jan 2010 15:24:31 -0000       1.2
+++ merovingian_proxy.c 15 Mar 2010 14:51:47 -0000      1.3
@@ -81,9 +81,10 @@
        struct sockaddr_in server;
        struct sockaddr *serv;
        socklen_t servsize;
-       int ssock;
+       int ssock = INVALID_SOCKET;
        char *port, *t;
        char *conn;
+       struct stat statbuf;
        stream *sfdin, *sfout;
        merovingian_proxy *pctos, *pstoc;
        pthread_t ptid;
@@ -100,32 +101,46 @@
                        port++;
                        if ((t = strchr(port, '/')) != NULL)
                                *t = '\0';
+               } else if (stat(conn, &statbuf) != -1) {
+                       ssock = 0;
                } else {
                        return(newErr("can't find a port in redirect, "
-                                               "this is not going to work: 
%s", url));
+                                               "or is not a UNIX socket file: 
%s", url));
                }
        } else {
                return(newErr("unsupported protocol/scheme in redirect: %s", 
url));
        }
 
-       hp = gethostbyname(conn);
-       if (hp == NULL)
-               return(newErr("cannot get address for hostname '%s': %s",
-                                       conn, strerror(errno)));
+       if (ssock != INVALID_SOCKET) {
+               struct sockaddr_un server;
+               /* UNIX socket connect */
+               if ((ssock = socket(PF_UNIX, SOCK_STREAM, 0)) < 0)
+                       return(newErr("cannot open socket: %s", 
strerror(errno)));
+               memset(&server, 0, sizeof(struct sockaddr_un));
+               server.sun_family = AF_UNIX;
+               strncpy(server.sun_path, conn, sizeof(server.sun_path) - 1);
+               if (connect(ssock, (SOCKPTR) &server, sizeof(struct 
sockaddr_un)))
+                       return(newErr("cannot connect: %s", strerror(errno)));
+       } else {
+               hp = gethostbyname(conn);
+               if (hp == NULL)
+                       return(newErr("cannot get address for hostname '%s': 
%s",
+                                               conn, strerror(errno)));
 
-       memset(&server, 0, sizeof(server));
-       memcpy(&server.sin_addr, hp->h_addr_list[0], hp->h_length);
-       server.sin_family = hp->h_addrtype;
-       server.sin_port = htons((unsigned short) (atoi(port) & 0xFFFF));
-       serv = (struct sockaddr *) &server;
-       servsize = sizeof(server);
+               memset(&server, 0, sizeof(server));
+               memcpy(&server.sin_addr, hp->h_addr_list[0], hp->h_length);
+               server.sin_family = hp->h_addrtype;
+               server.sin_port = htons((unsigned short) (atoi(port) & 0xFFFF));
+               serv = (struct sockaddr *) &server;
+               servsize = sizeof(server);
 
-       ssock = socket(serv->sa_family, SOCK_STREAM, IPPROTO_TCP);
-       if (ssock == INVALID_SOCKET)
-               return(newErr("failed to open socket: %s", strerror(errno)));
+               ssock = socket(serv->sa_family, SOCK_STREAM, IPPROTO_TCP);
+               if (ssock == INVALID_SOCKET)
+                       return(newErr("cannot open socket: %s", 
strerror(errno)));
 
-       if (connect(ssock, serv, servsize) < 0)
-               return(newErr("failed to connect: %s", strerror(errno)));
+               if (connect(ssock, serv, servsize) < 0)
+                       return(newErr("cannot connect: %s", strerror(errno)));
+       }
 
        sfdin = block_stream(socket_rastream(ssock, "merovingian<-server (proxy 
read)"));
        sfout = block_stream(socket_wastream(ssock, "merovingian->server (proxy 
write)"));


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Monetdb-sql-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-sql-checkins

Reply via email to