summaryrefslogtreecommitdiff
path: root/src/interfaces/libpq/fe-connect.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/libpq/fe-connect.c')
-rw-r--r--src/interfaces/libpq/fe-connect.c57
1 files changed, 24 insertions, 33 deletions
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index cc8af6d6acf..30f9933950c 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -7,35 +7,31 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.78 1998/08/09 02:59:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.79 1998/08/17 03:50:34 scrappy Exp $
*
*-------------------------------------------------------------------------
*/
+#include "libpq-fe.h"
+#include "libpq-int.h"
+#include "fe-auth.h"
+#include "postgres.h"
+
#include <stdlib.h>
-#include <sys/types.h>
#ifdef WIN32
#include "win32.h"
#else
-#include <sys/socket.h>
+#if !defined(NO_UNISTD_H)
#include <unistd.h>
+#endif
#include <netdb.h>
-#include <sys/un.h>
-#include <netinet/in.h>
#include <netinet/tcp.h>
#endif
#include <fcntl.h>
-#include <stdio.h>
-#include <ctype.h>
#include <string.h>
#include <errno.h>
#include <ctype.h> /* for isspace() */
-#include "postgres.h"
-#include "fe-auth.h"
-#include "fe-connect.h"
-#include "libpq-fe.h"
-
#ifndef HAVE_STRDUP
#include "strdup.h"
#endif
@@ -113,7 +109,7 @@ static PQconninfoOption PQconninfoOptions[] = {
NULL, NULL, 0}
};
-struct EnvironmentOptions
+static struct EnvironmentOptions
{
const char *envName,
*pgName;
@@ -496,7 +492,7 @@ connectDB(PGconn *conn)
struct hostent *hp;
StartupPacket sp;
AuthRequest areq;
- int laddrlen = sizeof(SockAddr);
+ int laddrlen;
int portno,
family;
char beresp;
@@ -514,7 +510,7 @@ connectDB(PGconn *conn)
MemSet((char *) &sp, 0, sizeof(StartupPacket));
- sp.protoVersion = (ProtocolVersion) htonl(PG_PROTOCOL_LATEST);
+ sp.protoVersion = (ProtocolVersion) htonl(PG_PROTOCOL_LIBPQ);
strncpy(sp.user, conn->pguser, SM_USER);
strncpy(sp.database, conn->dbName, SM_DATABASE);
@@ -626,6 +622,7 @@ connectDB(PGconn *conn)
}
/* Fill in the client address */
+ laddrlen = sizeof(conn->laddr);
if (getsockname(conn->sock, &conn->laddr.sa, &laddrlen) < 0)
{
(void) sprintf(conn->errorMessage,
@@ -640,7 +637,7 @@ connectDB(PGconn *conn)
/* Send the startup packet. */
- if (packetSend(conn, (char *) &sp, sizeof(StartupPacket)) != STATUS_OK)
+ if (pqPacketSend(conn, (char *) &sp, sizeof(StartupPacket)) != STATUS_OK)
{
sprintf(conn->errorMessage,
"connectDB() -- couldn't send startup packet: errno=%d\n%s\n",
@@ -786,7 +783,7 @@ PQsetenv(PGconn *conn)
char setQuery[80]; /* mjl: size okay? XXX */
#ifdef MULTIBYTE
char *envname = "PGCLIENTENCODING";
- char envbuf[64];
+ static char envbuf[64]; /* big enough? */
char *env;
char *encoding = 0;
PGresult *rtn;
@@ -875,7 +872,7 @@ freePGconn(PGconn *conn)
{
if (!conn)
return;
- PQclearAsyncResult(conn); /* deallocate result and curTuple */
+ pqClearAsyncResult(conn); /* deallocate result and curTuple */
if (conn->sock >= 0)
#ifdef WIN32
closesocket(conn->sock);
@@ -919,19 +916,13 @@ closePGconn(PGconn *conn)
{
/*
* Try to send "close connection" message to backend.
- * BUT: backend might have already closed connection.
- * To avoid being killed by SIGPIPE, we need to detect this before
- * writing. Check for "read ready" condition which indicates EOF.
+ * Ignore any error.
+ * Note: this routine used to go to substantial lengths to avoid
+ * getting SIGPIPE'd if the connection were already closed.
+ * Now we rely on pqFlush to avoid the signal.
*/
- while (pqReadReady(conn)) {
- if (pqReadData(conn) < 0)
- break;
- }
- if (conn->sock >= 0) {
- /* Should be safe now... */
- (void) pqPuts("X", conn);
- (void) pqFlush(conn);
- }
+ (void) pqPuts("X", conn);
+ (void) pqFlush(conn);
}
/*
@@ -947,7 +938,7 @@ closePGconn(PGconn *conn)
conn->status = CONNECTION_BAD; /* Well, not really _bad_ - just
* absent */
conn->asyncStatus = PGASYNC_IDLE;
- PQclearAsyncResult(conn); /* deallocate result and curTuple */
+ pqClearAsyncResult(conn); /* deallocate result and curTuple */
if (conn->lobjfuncs)
free(conn->lobjfuncs);
conn->lobjfuncs = NULL;
@@ -1080,14 +1071,14 @@ cancel_errReturn:
/*
- * PacketSend() -- send a single-packet message.
+ * pqPacketSend() -- send a single-packet message.
* this is like PacketSend(), defined in backend/libpq/pqpacket.c
*
* RETURNS: STATUS_ERROR if the write fails, STATUS_OK otherwise.
* SIDE_EFFECTS: may block.
*/
int
-packetSend(PGconn *conn, const char *buf, size_t len)
+pqPacketSend(PGconn *conn, const char *buf, size_t len)
{
/* Send the total packet size. */