WIN32 Non Blocking

Поиск
Список
Период
Сортировка
От Darko Prenosil
Тема WIN32 Non Blocking
Дата
Msg-id 9ivp00$1nmo$1@news.tht.net
обсуждение исходный текст
Ответы Re: WIN32 Non Blocking  ("Denis A. Doroshenko" <d.doroshenko@omnitel.net>)
Re: WIN32 Non Blocking  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: WIN32 Non Blocking  (Bruce Momjian <pgman@candle.pha.pa.us>)
Список 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;
  }

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: pgsql
Следующее
От: "Denis A. Doroshenko"
Дата:
Сообщение: Re: WIN32 Non Blocking