Re: Unix domain socket

Поиск
Список
Период
Сортировка
От Dave Page
Тема Re: Unix domain socket
Дата
Msg-id E7F85A1B5FF8D44C8A1AF6885BC9A0E472B8AB@ratbert.vale-housing.co.uk
обсуждение исходный текст
Ответ на Unix domain socket  (Ramon Danieli <ramond@post.tau.ac.il>)
Список pgsql-odbc
Thanks Ramon, patch applied.

Regards, Dave.

> -----Original Message-----
> From: Ramon Danieli [mailto:ramond@post.tau.ac.il]
> Sent: 01 March 2005 09:01
> To: pgsql-odbc@postgresql.org
> Cc: Dave Page; Peter Eisentraut
> Subject: Re: [ODBC] Unix domain socket
>
> Quoting Peter Eisentraut <peter_e@gmx.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.
>
>

В списке pgsql-odbc по дате отправления:

Предыдущее
От: "Dave Page"
Дата:
Сообщение: psqlODBC 08.00.0100 Available for download
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: Unix domain socket