Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Unix domain socket



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.
> 
> 



Home | Main Index | Thread Index

Privacy Policy | PostgreSQL Archives hosted by Command Prompt, Inc. | Designed by tinysofa
Copyright © 1996 – 2008 PostgreSQL Global Development Group