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:

Previous
From: "asergioz"
Date:
Subject: Calculations with NUMERIC data type
Next
From: Manika Dey
Date:
Subject: postgres access from windowsNT