Include 'IPv4', 'IPv6', or 'Unix' in socket-creation failure messages,
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 12 Aug 2003 22:42:01 +0000 (22:42 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 12 Aug 2003 22:42:01 +0000 (22:42 +0000)
in hopes of soothing fears of those with partial IPv6 support.  Still an
open question whether we should report EAFNOSUPPORT errors at all,
though.

src/backend/libpq/pqcomm.c

index 72d444ad8f2ddecbde2b431871f348621fa24050..6d4a4ea0171265071b9e69c3809c8465d62eb101 100644 (file)
@@ -30,7 +30,7 @@
  * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- *     $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.164 2003/08/07 19:37:13 tgl Exp $
+ *     $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.165 2003/08/12 22:42:01 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -209,7 +209,9 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
        int                     maxconn;
        int                     one = 1;
        int                     ret;
-       char            portNumberStr[64];
+       char            portNumberStr[32];
+       const char *familyDesc;
+       char            familyDescBuf[64];
        char       *service;
        struct addrinfo *addrs = NULL,
                           *addr;
@@ -276,11 +278,37 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
                        break;
                }
 
+               /* set up family name for possible error messages */
+               switch (addr->ai_family)
+               {
+                       case AF_INET:
+                               familyDesc = gettext("IPv4");
+                               break;
+#ifdef HAVE_IPV6
+                       case AF_INET6:
+                               familyDesc = gettext("IPv6");
+                               break;
+#endif
+#ifdef HAVE_UNIX_SOCKETS
+                       case AF_UNIX:
+                               familyDesc = gettext("Unix");
+                               break;
+#endif
+                       default:
+                               snprintf(familyDescBuf, sizeof(familyDescBuf),
+                                                gettext("unrecognized address family %d"),
+                                                addr->ai_family);
+                               familyDesc = familyDescBuf;
+                               break;
+               }
+
                if ((fd = socket(addr->ai_family, SOCK_STREAM, 0)) < 0)
                {
                        ereport(LOG,
                                        (errcode_for_socket_access(),
-                                        errmsg("failed to create socket: %m")));
+                                        /* translator: %s is IPv4, IPv6, or Unix */
+                                        errmsg("could not create %s socket: %m",
+                                                       familyDesc)));
                        continue;
                }
 
@@ -323,7 +351,9 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
                {
                        ereport(LOG,
                                        (errcode_for_socket_access(),
-                                        errmsg("failed to bind server socket: %m"),
+                                        /* translator: %s is IPv4, IPv6, or Unix */
+                                        errmsg("could not bind %s socket: %m",
+                                                       familyDesc),
                                         (IS_AF_UNIX(addr->ai_family)) ?
                          errhint("Is another postmaster already running on port %d?"
                                          " If not, remove socket node \"%s\" and retry.",
@@ -361,7 +391,9 @@ StreamServerPort(int family, char *hostName, unsigned short portNumber,
                {
                        ereport(LOG,
                                        (errcode_for_socket_access(),
-                                        errmsg("failed to listen on server socket: %m")));
+                                        /* translator: %s is IPv4, IPv6, or Unix */
+                                        errmsg("could not listen on %s socket: %m",
+                                                       familyDesc)));
                        closesocket(fd);
                        continue;
                }