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: