Re: Unix domain socket

From: "Dave Page" <dpage(at)vale-housing(dot)co(dot)uk>
To: "Ramon Danieli" <ramond(at)post(dot)tau(dot)ac(dot)il>, <pgsql-odbc(at)postgresql(dot)org>
Cc: "Peter Eisentraut" <peter_e(at)gmx(dot)net>
Subject: Re: Unix domain socket
Date: 2005-03-02 15:11:56
Message-ID: E7F85A1B5FF8D44C8A1AF6885BC9A0E472B8AB@ratbert.vale-housing.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-odbc

Thanks Ramon, patch applied.

Regards, Dave.

> -----Original Message-----
> From: Ramon Danieli [mailto:ramond(at)post(dot)tau(dot)ac(dot)il]
> Sent: 01 March 2005 09:01
> To: pgsql-odbc(at)postgresql(dot)org
> Cc: Dave Page; Peter Eisentraut
> Subject: Re: [ODBC] Unix domain socket
>
> Quoting Peter Eisentraut <peter_e(at)gmx(dot)net>:
>
> > Dave Page wrote:
> > > Hmm, did even realise it had crept in there. Well to enable it you
> > > will need to define the HAVE_UNIX_SOCKETS macro when you compile.
> > > Does it then work? As for why it's done the way it is, I
> have no idea
> > > - it was committed by Hiroshi Inoue, so he'd need to answer that -
> > > unfortunately though, he no longer works on psqlODBC.
> >
> > HAVE_UNIX_SOCKETS is defined in the server source tree, so
> I guess this
> > could be a leftover from those days. Turn on the macro and
> see if you
> > get it working.
> >
> > --
>
> The macro is turned on automatically (RHL 4.0AS, gcc version
> 3.4.2 20041017 (Red
> Hat 3.4.2-6.fc3)) and it works.
>
> The following patch allow users to configure the Unix domain
> socket path,
> using the "Uds" property.
> I took some code from the unixODBC PG driver and performed
> the necessary
> adjustments.
> Please note that unlike unixODBC, I have followed the current
> convention, which
> means that:
> 1) "Uds" is considered only if "Servername" is empty.
> 2) Default path is "/tmp".
> 3) The provided path should point the folder that comtains
> the UDS node.
>
> Please let me know if you find anything wrong in this patch
> and whether it will
> be included sometimes in the near future.
>
> Thanks,
> Ramon
>
>
> diff -Naur psqlodbc-08.00.0004/connection.c
> psqlodbc-08.00.0004.patch/connection.c
> --- psqlodbc-08.00.0004/connection.c 2005-01-28
> 23:36:14.000000000 +0200
> +++ psqlodbc-08.00.0004.patch/connection.c 2005-02-27
> 14:40:34.430232000 +0200
> @@ -725,7 +725,16 @@
> return 0;
> }
>
> - mylog("CC_connect(): DSN = '%s', server = '%s',
> port = '%s', database = '%s',
> username = '%s', password='%s'\n", ci->dsn, ci->server,
> ci->port, ci->database,
> ci->username, ci->password ? "xxxxx" : "");
> + mylog("CC_connect(): DSN = '%s', server = '%s',
> port = '%s',"
> +#ifdef HAVE_UNIX_SOCKETS
> + " uds = '%s',"
> +#endif
> + " database = '%s', username = '%s',"
> + " password='%s'\n", ci->dsn, ci->server, ci->port,
> +#ifdef HAVE_UNIX_SOCKETS
> + ci->uds,
> +#endif
> + ci->database, ci->username, ci->password
> ? "xxxxx" : "");
>
> another_version_retry:
>
> @@ -747,7 +756,11 @@
>
> mylog("connecting to the server socket...\n");
>
> - SOCK_connect_to(sock, (short) atoi(ci->port),
> ci->server);
> + SOCK_connect_to(sock, (short) atoi(ci->port), ci->server
> +#ifdef HAVE_UNIX_SOCKETS
> + , ci->uds
> +#endif
> + );
> if (SOCK_get_errcode(sock) != 0)
> {
> mylog("connection to the server socket
> failed.\n");
> diff -Naur psqlodbc-08.00.0004/connection.h
> psqlodbc-08.00.0004.patch/connection.h
> --- psqlodbc-08.00.0004/connection.h 2005-01-28
> 23:36:14.000000000 +0200
> +++ psqlodbc-08.00.0004.patch/connection.h 2005-02-27
> 16:04:37.469858000 +0200
> @@ -19,6 +19,10 @@
> #include <pthread.h>
> #endif
>
> +#if !defined WIN32 && defined HAVE_SYS_UN_H && !defined
> HAVE_UNIX_SOCKETS
> +#define HAVE_UNIX_SOCKETS
> +#endif
> +
> typedef enum
> {
> CONN_NOT_CONNECTED, /* Connection
> has not been established */
> @@ -239,6 +243,9 @@
> char conn_settings[LARGE_REGISTRY_LEN];
> char protocol[SMALL_REGISTRY_LEN];
> char port[SMALL_REGISTRY_LEN];
> +#ifdef HAVE_UNIX_SOCKETS
> + char uds[LARGE_REGISTRY_LEN];
> +#endif
> char onlyread[SMALL_REGISTRY_LEN];
> char fake_oid_index[SMALL_REGISTRY_LEN];
> char show_oid_column[SMALL_REGISTRY_LEN];
> diff -Naur psqlodbc-08.00.0004/dlg_specific.c
> psqlodbc-08.00.0004.patch/dlg_specific.c
> --- psqlodbc-08.00.0004/dlg_specific.c 2005-01-28
> 23:36:15.000000000 +0200
> +++ psqlodbc-08.00.0004.patch/dlg_specific.c 2005-02-27
> 16:03:10.559495000
> +0200
> @@ -286,6 +286,11 @@
> else if (stricmp(attribute, INI_PORT) == 0)
> strcpy(ci->port, value);
>
> +#ifdef HAVE_UNIX_SOCKETS
> + else if (stricmp(attribute, INI_UDS) == 0)
> + strcpy(ci->uds, value);
> +#endif
> +
> else if (stricmp(attribute, INI_READONLY) == 0 ||
> stricmp(attribute, "A0") ==
> 0)
> strcpy(ci->onlyread, value);
>
> @@ -492,6 +497,11 @@
> if (ci->port[0] == '\0' || overwrite)
> SQLGetPrivateProfileString(DSN, INI_PORT, "",
> ci->port, sizeof(ci->port),
> ODBC_INI);
>
> +#ifdef HAVE_UNIX_SOCKETS
> + if (ci->uds[0] == '\0' || overwrite)
> + SQLGetPrivateProfileString(DSN, INI_UDS, "",
> ci->uds, sizeof(ci->uds),
> ODBC_INI);
> +#endif
> +
> if (ci->onlyread[0] == '\0' || overwrite)
> SQLGetPrivateProfileString(DSN, INI_READONLY,
> "", ci->onlyread,
> sizeof(ci->onlyread), ODBC_INI);
>
> @@ -725,6 +735,13 @@
>
> ci->port,
>
> ODBC_INI);
>
> +#ifdef HAVE_UNIX_SOCKETS
> + SQLWritePrivateProfileString(DSN,
> +
> INI_UDS,
> +
> ci->uds,
> +
> ODBC_INI);
> +#endif
> +
> SQLWritePrivateProfileString(DSN,
>
> INI_USER,
>
> ci->username,
> diff -Naur psqlodbc-08.00.0004/dlg_specific.h
> psqlodbc-08.00.0004.patch/dlg_specific.h
> --- psqlodbc-08.00.0004/dlg_specific.h 2005-01-28
> 23:36:15.000000000 +0200
> +++ psqlodbc-08.00.0004.patch/dlg_specific.h 2005-02-27
> 14:10:03.393190000
> +0200
> @@ -38,6 +38,14 @@
> #define INI_KDESC "Description" /* Data
> source description */
> #define INI_SERVER "Servername" /* Name
> of Server running PostgreSQL */
> #define INI_PORT "Port" /* Port
> on which the Postmaster is listening */
> +
> +#if !defined WIN32 && defined HAVE_SYS_UN_H
> +#ifndef HAVE_UNIX_SOCKETS
> +#define HAVE_UNIX_SOCKETS
> +#endif
> +#define INI_UDS "Uds"
> /* Unix domain socket path*/
> +#endif
> +
> #define INI_DATABASE "Database" /*
> Database Name */
> #define INI_USER "Username" /*
> Default User Name */
> #define INI_PASSWORD "Password" /*
> Default Password */
> diff -Naur psqlodbc-08.00.0004/socket.c
> psqlodbc-08.00.0004.patch/socket.c
> --- psqlodbc-08.00.0004/socket.c 2005-01-28
> 23:36:20.000000000 +0200
> +++ psqlodbc-08.00.0004.patch/socket.c 2005-02-27
> 16:20:34.993553000 +0200
> @@ -109,7 +109,11 @@
>
>
> char
> -SOCK_connect_to(SocketClass *self, unsigned short port, char
> *hostname)
> +SOCK_connect_to(SocketClass *self, unsigned short port, char
> *hostname
> +#ifdef HAVE_UNIX_SOCKETS
> + , char *uds /* unix domain socket path */
> +#endif
> + )
> {
> #if defined (POSIX_MULTITHREAD_SUPPORT)
> const int bufsz = 8192;
> @@ -140,7 +144,7 @@
>
>
> /*
> - * If it is a valid IP address, use it. Otherwise use
> hostname lookup.
> + * If it is a valid IP address, use it. Otherwise use
> AF_UNIX socket.
> */
> if (hostname && hostname[0])
> {
> @@ -196,7 +200,7 @@
> }
> un->sun_family = family = AF_UNIX;
> /* passing NULL means that this only suports
> the pg default "/tmp" */
> - UNIXSOCK_PATH(un, port, ((char *) NULL));
> + UNIXSOCK_PATH(un, port, uds);
> sLen = UNIXSOCK_LEN(un);
> self->sadr = (struct sockaddr *) un;
> }
> diff -Naur psqlodbc-08.00.0004/socket.h
> psqlodbc-08.00.0004.patch/socket.h
> --- psqlodbc-08.00.0004/socket.h 2005-01-28
> 23:36:20.000000000 +0200
> +++ psqlodbc-08.00.0004.patch/socket.h 2005-02-27
> 16:18:22.733047000 +0200
> @@ -34,7 +34,7 @@
>
> #define SOCK_ERRNO errno
> #define SOCK_ERRNO_SET(e) (errno = e)
> -#ifdef HAVE_SYS_UN_H
> +#if defined HAVE_SYS_UN_H && !defined HAVE_UNIX_SOCKETS
> #define HAVE_UNIX_SOCKETS
> #endif /* HAVE_SYS_UN_H */
> #else
> @@ -121,7 +121,12 @@
> /* Socket prototypes */
> SocketClass *SOCK_Constructor(const ConnectionClass *conn);
> void SOCK_Destructor(SocketClass *self);
> -char SOCK_connect_to(SocketClass *self, unsigned
> short port, char *hostname);
> +char SOCK_connect_to(SocketClass *self, unsigned short port,
> + char *hostname
> +#ifdef HAVE_UNIX_SOCKETS
> + , char *uds
> +#endif
> + );
> void SOCK_get_n_char(SocketClass *self, char
> *buffer, int len);
> void SOCK_put_n_char(SocketClass *self, char
> *buffer, int len);
> BOOL SOCK_get_string(SocketClass *self, char
> *buffer, int bufsize);
>
>
> ----------------------------------------------------------------
> This message was sent using IMP, the Internet Messaging Program.
>
>

Browse pgsql-odbc by date

  From Date Subject
Next Message Peter Eisentraut 2005-03-02 15:31:15 Re: Unix domain socket
Previous Message Dave Page 2005-03-02 14:56:41 psqlODBC 08.00.0100 Available for download