WIN32 NON-BLOCKING - Mailing list pgsql-interfaces
| From | Darko Prenosil |
|---|---|
| Subject | WIN32 NON-BLOCKING |
| Date | |
| Msg-id | 9ivqs7$1o1k$1@news.tht.net Whole thread Raw |
| Responses |
Re: WIN32 NON-BLOCKING
|
| List | pgsql-interfaces |
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; }
pgsql-interfaces by date: