aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/libpq/pqcomm.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c
index a75631e5f05..c3223bf82f9 100644
--- a/src/backend/libpq/pqcomm.c
+++ b/src/backend/libpq/pqcomm.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.24 1997/11/07 20:51:34 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/pqcomm.c,v 1.25 1997/11/10 02:21:18 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -582,15 +582,16 @@ static void do_unlink()
int
StreamServerPort(char *hostName, short portName, int *fdP)
{
- struct sockaddr_in sin;
- struct sockaddr_un sun;
+ union {
+ struct sockaddr_in in;
+ struct sockaddr_un un;
+ } saddr;
int fd, err, family;
+ size_t len;
int one = 1;
family = hostName != NULL ? AF_INET : AF_UNIX;
- MemSet((char *) &sin, 0, sizeof sin);
-
if ((fd = socket(family, SOCK_STREAM, 0)) < 0)
{
sprintf(PQerrormsg,
@@ -611,23 +612,21 @@ StreamServerPort(char *hostName, short portName, int *fdP)
pqdebug("%s", PQerrormsg);
return (STATUS_ERROR);
}
+ bzero(&saddr, sizeof(saddr));
if (family == AF_UNIX)
{
- size_t len;
- bzero(&sun, sizeof(sun));
- sun.sun_family = family;
- len = UNIXSOCK_PATH(sun,portName);
- strcpy(sock_path, sun.sun_path);
- err = bind(fd, (struct sockaddr *) &sun, len);
+ saddr.un.sun_family = family;
+ len = UNIXSOCK_PATH(saddr.un,portName);
+ strcpy(sock_path, saddr.un.sun_path);
}
else
{
- bzero(&sin, sizeof(sin));
- sin.sin_family = family;
- sin.sin_addr.s_addr = htonl(INADDR_ANY);
- sin.sin_port = htons(portName);
- err = bind(fd, (struct sockaddr *) &sin, sizeof sin);
+ saddr.in.sin_family = family;
+ saddr.in.sin_addr.s_addr = htonl(INADDR_ANY);
+ saddr.in.sin_port = htons(portName);
+ len = sizeof saddr.in;
}
+ err = bind(fd, (struct sockaddr *) &saddr, len);
if (err < 0)
{
sprintf(PQerrormsg,