Remove calls to getprotobyname(), which we now know leaks memory on

some platforms --- and I also see that it is documented as not thread-
safe on HPUX and possibly other platforms.  No good reason not to just
use IPPROTO_TCP constant from <netinet/in.h> instead.
This commit is contained in:
Tom Lane 2000-05-21 21:19:53 +00:00
parent 9dab9ab5e4
commit 1f0aff03c0
2 changed files with 6 additions and 22 deletions

View File

@ -29,7 +29,7 @@
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $Id: pqcomm.c,v 1.90 2000/05/20 13:10:54 ishii Exp $ * $Id: pqcomm.c,v 1.91 2000/05/21 21:19:53 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -360,19 +360,12 @@ StreamConnection(int server_fd, Port *port)
return STATUS_ERROR; return STATUS_ERROR;
} }
/* select TCP_NODELAY option if it's a TCP connection */ /* select NODELAY and KEEPALIVE options if it's a TCP connection */
if (port->laddr.sa.sa_family == AF_INET) if (port->laddr.sa.sa_family == AF_INET)
{ {
struct protoent *pe;
int on = 1; int on = 1;
pe = getprotobyname("TCP"); if (setsockopt(port->sock, IPPROTO_TCP, TCP_NODELAY,
if (pe == NULL)
{
perror("postmaster: StreamConnection: getprotobyname");
return STATUS_ERROR;
}
if (setsockopt(port->sock, pe->p_proto, TCP_NODELAY,
&on, sizeof(on)) < 0) &on, sizeof(on)) < 0)
{ {
perror("postmaster: StreamConnection: setsockopt(TCP_NODELAY)"); perror("postmaster: StreamConnection: setsockopt(TCP_NODELAY)");

View File

@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.126 2000/04/12 17:17:14 momjian Exp $ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-connect.c,v 1.127 2000/05/21 21:19:53 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -29,6 +29,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <unistd.h> #include <unistd.h>
#include <netdb.h> #include <netdb.h>
#include <netinet/in.h>
#include <netinet/tcp.h> #include <netinet/tcp.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#endif #endif
@ -625,19 +626,9 @@ connectMakeNonblocking(PGconn *conn)
static int static int
connectNoDelay(PGconn *conn) connectNoDelay(PGconn *conn)
{ {
struct protoent *pe;
int on = 1; int on = 1;
pe = getprotobyname("TCP"); if (setsockopt(conn->sock, IPPROTO_TCP, TCP_NODELAY,
if (pe == NULL)
{
printfPQExpBuffer(&conn->errorMessage,
"connectNoDelay() -- "
"getprotobyname failed: errno=%d\n%s\n",
errno, strerror(errno));
return 0;
}
if (setsockopt(conn->sock, pe->p_proto, TCP_NODELAY,
#ifdef WIN32 #ifdef WIN32
(char *) (char *)
#endif #endif