Actually, the docs say SSL_read/write can error needing READ or WRITE:

        http://www.openssl.org/docs/ssl/SSL_read.html#

The SSL_write docs are the same.  I have applied the following patch to
handle both new cases.  Does this help the SSL test program you have?

---------------------------------------------------------------------------

Tom Lane wrote:
> Bruce Momjian <[EMAIL PROTECTED]> writes:
> > Yep, typo.  Patched to CVS current and backpatched to 7.3.X.
> 
> I think this fix is exactly backward.  Why would SSL_write need to
> return ERROR_WANT_WRITE?  It couldn't.  The correct fix is that
> SSL_write might return ERROR_WANT_READ, for which reading would be
> the right response.
> 
> BTW the real problem, both here and elsewhere in this file, is the
> lack of a "default: elog-out" case in the switch statements.  This
> code will simply break if any unexpected case occurs.
> 
>                       regards, tom lane
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: src/backend/libpq/be-secure.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/libpq/be-secure.c,v
retrieving revision 1.27
diff -c -c -r1.27 be-secure.c
*** src/backend/libpq/be-secure.c       29 Mar 2003 03:56:44 -0000      1.27
--- src/backend/libpq/be-secure.c       29 Mar 2003 04:59:01 -0000
***************
*** 285,290 ****
--- 285,293 ----
                        case SSL_ERROR_WANT_READ:
                                n = secure_read(port, ptr, len);
                                break;
+                       case SSL_ERROR_WANT_WRITE:
+                               n = secure_write(port, ptr, len);
+                               break;
                        case SSL_ERROR_SYSCALL:
                                if (n == -1)
                                        elog(COMMERROR, "SSL SYSCALL error: %s", 
strerror(errno));
***************
*** 336,341 ****
--- 339,347 ----
                {
                        case SSL_ERROR_NONE:
                                port->count += n;
+                               break;
+                       case SSL_ERROR_WANT_READ:
+                               n = secure_read(port, ptr, len);
                                break;
                        case SSL_ERROR_WANT_WRITE:
                                n = secure_write(port, ptr, len);
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to