From: | "Darko Prenosil" <darko_prenosil(at)yahoo(dot)com> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | WIN32 Non Blocking |
Date: | 2001-07-16 22:12:48 |
Message-ID: | 9ivp00$1nmo$1@news.tht.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
Hi ,Bruce !
There is diff for fe-connect.c.
Diff was made with options -cr as You asked.
I must say that this is the first time I ever use diff, so I do not know if
if it is ok.
I did not check if all of non-blocking functions are working,
but I checked PQsetnonblocking,PQisnonblocking,
PQsendQuery, PQgetResult and few others.
I think that
*** ./fe-connect.c Tue Jun 12 20:03:04 2001
--- ./fe-connect1.c Fri Jun 29 05:25:18 2001
***************
*** 189,195 ****
static void defaultNoticeProcessor(void *arg, const char *message);
static int parseServiceInfo(PQconninfoOption *options,
PQExpBuffer errorMessage);
!
/* ----------------
* Connecting to a Database
--- 189,195 ----
static void defaultNoticeProcessor(void *arg, const char *message);
static int parseServiceInfo(PQconninfoOption *options,
PQExpBuffer errorMessage);
! static char FLastError[200];
/* ----------------
* Connecting to a Database
***************
*** 240,249 ****
PQconnectdb(const char *conninfo)
{
PGconn *conn = PQconnectStart(conninfo);
-
if (conn && conn->status != CONNECTION_BAD)
(void) connectDBComplete(conn);
-
return conn;
}
--- 240,247 ----
***************
*** 291,296 ****
--- 289,295 ----
{
conn->status = CONNECTION_BAD;
/* errorMessage is already set */
+ sprintf( FLastError, "PQconnectStart-Invalid Connection Info");
return conn;
}
***************
*** 516,523 ****
conn->require_ssl = 0;
#endif
! if (error)
conn->status = CONNECTION_BAD;
else
{
if (connectDBStart(conn))
--- 515,524 ----
conn->require_ssl = 0;
#endif
! if (error){
conn->status = CONNECTION_BAD;
+ sprintf( FLastError, "Failed to set DBLogin");
+ }
else
{
if (connectDBStart(conn))
***************
*** 709,717 ****
if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) < 0)
#endif
{
printfPQExpBuffer(&conn->errorMessage,
! "connectMakeNonblocking -- fcntl() failed: errno=%d\n%s\n",
! errno, strerror(errno));
return 0;
}
--- 710,724 ----
if (fcntl(conn->sock, F_SETFL, O_NONBLOCK) < 0)
#endif
{
+ #ifdef WIN32
+ sprintf( FLastError, "connectMakeNonblocking -- fcntl() failed:
errno=%d\n%s\n",
+ WSAGetLastError());
+ #else
printfPQExpBuffer(&conn->errorMessage,
! "connectMakeNonblocking -- fcntl() failed: errno=%d\n%s\n",
! errno, strerror(errno));
! #endif
!
return 0;
}
***************
*** 788,794 ****
{
int portno,
family;
-
#ifdef USE_SSL
StartupPacket np; /* Used to negotiate SSL connection */
char SSLok;
--- 795,800 ----
***************
*** 932,943 ****
* Thus, we have make arrangements for all eventualities.
* ----------
*/
if (connect(conn->sock, &conn->raddr.sa, conn->raddr_len) < 0)
{
- #ifndef WIN32
if (errno == EINPROGRESS || errno == 0)
#else
! if (WSAGetLastError() == WSAEINPROGRESS)
#endif
{
--- 938,952 ----
* Thus, we have make arrangements for all eventualities.
* ----------
*/
+
+ #ifndef WIN32
if (connect(conn->sock, &conn->raddr.sa, conn->raddr_len) < 0)
{
if (errno == EINPROGRESS || errno == 0)
#else
! if (connect(conn->sock, &conn->raddr.sa, conn->raddr_len) != 0)
! {
! if (WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() ==
WSAEWOULDBLOCK)
#endif
{
***************
*** 1056,1061 ****
--- 1065,1071 ----
conn->status = CONNECTION_BAD;
return 0;
+
}
***************
*** 1095,1100 ****
--- 1105,1111 ----
if (pqWait(1, 0, conn))
{
conn->status = CONNECTION_BAD;
+ sprintf(FLastError,conn->errorMessage.data);
return 0;
}
break;
***************
*** 1103,1108 ****
--- 1114,1120 ----
if (pqWait(0, 1, conn))
{
conn->status = CONNECTION_BAD;
+ sprintf(FLastError,conn->errorMessage.data);
return 0;
}
break;
***************
*** 1110,1115 ****
--- 1122,1128 ----
default:
/* Just in case we failed to set it in PQconnectPoll */
conn->status = CONNECTION_BAD;
+ sprintf(FLastError,conn->errorMessage.data);
return 0;
}
***************
*** 1208,1222 ****
{
ACCEPT_TYPE_ARG3 laddrlen;
- #ifndef WIN32
- int optval;
-
- #else
- char optval;
-
- #endif
- ACCEPT_TYPE_ARG3 optlen = sizeof(optval);
-
/*
* Write ready, since we've made it here, so the
* connection has been made.
--- 1221,1226 ----
***************
*** 1226,1235 ****
* Now check (using getsockopt) that there is not an error
* state waiting for us on the socket.
*/
if (getsockopt(conn->sock, SOL_SOCKET, SO_ERROR,
! (char *) &optval, &optlen) == -1)
! {
printfPQExpBuffer(&conn->errorMessage,
"PQconnectPoll() -- getsockopt() failed: "
"errno=%d\n%s\n",
--- 1230,1241 ----
* Now check (using getsockopt) that there is not an error
* state waiting for us on the socket.
*/
+ #ifndef WIN32
+ int optval;
+ ACCEPT_TYPE_ARG3 optlen = sizeof(optval);
if (getsockopt(conn->sock, SOL_SOCKET, SO_ERROR,
! (char *) &optval, &optlen) == -1){
printfPQExpBuffer(&conn->errorMessage,
"PQconnectPoll() -- getsockopt() failed: "
"errno=%d\n%s\n",
***************
*** 1247,1252 ****
--- 1253,1272 ----
connectFailureMessage(conn, "PQconnectPoll()", optval);
goto error_return;
}
+ #else
+ char far optval[8];
+ ACCEPT_TYPE_ARG3 optlen = sizeof(optval);
+
+ int OptResult=getsockopt(conn->sock, SOL_SOCKET, SO_ERROR,optval,
&optlen);
+ if (OptResult==SOCKET_ERROR){
+ printfPQExpBuffer(&conn->errorMessage,
+ "PQconnectPoll() -- getsockopt() failed: "
+ "errno=%i\n",
+ WSAGetLastError());
+ connectFailureMessage(conn, "PQconnectPoll()", OptResult);
+ goto error_return;
+ }
+ #endif
/* Fill in the client address */
laddrlen = sizeof(conn->laddr);
***************
*** 1929,1934 ****
--- 1949,1955 ----
#endif
if (conn->sock >= 0)
#ifdef WIN32
+ //WSACleanup();
closesocket(conn->sock);
#else
close(conn->sock);
***************
*** 2699,2706 ****
char *
PQerrorMessage(const PGconn *conn)
{
if (!conn)
! return "PQerrorMessage: conn pointer is NULL\n";
return conn->errorMessage.data;
}
--- 2720,2732 ----
char *
PQerrorMessage(const PGconn *conn)
{
+ //char ErrBuffer[200];
if (!conn)
! #ifdef WIN32
! return FLastError;
! #else
! return "PQerrorMessage: conn pointer is NULL\n";
! #endif
return conn->errorMessage.data;
}
From | Date | Subject | |
---|---|---|---|
Next Message | Sumant , The Programmer | 2001-07-17 12:20:55 | Doubt |
Previous Message | Bruce Momjian | 2001-07-16 19:17:40 | Re: pgsql |