Asynchronous interface help?

Поиск
Список
Период
Сортировка
От Adam Haberlach
Тема Asynchronous interface help?
Дата
Msg-id 20010102134030.A25130@newsnipple.com
обсуждение исходный текст
Ответы Re: Asynchronous interface help?  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Asynchronous interface help?  (Paul Breen <pbreen@computerpark.co.uk>)
Список pgsql-interfaces
I'm working on using PostgreSQL to synchronize two seperate web connections
for some silly authentication reasons.  I'm adding a method to PHP that will
allow the generation of a page to wait on a named notify from another
backend process.  It doesn't seem to work correctly.  Here's the abridged
version of the code...

PHP_FUNCTION(pg_wait) {   zval **timeout, **pgsql_link;   int id = -1;   fd_set rfds;   int retval;   PGconn *pgsql;
PGnotify*notify;   struct timeval tv;   char *buf;   int nbytes;   int trycount=0;
 
/* ... */
   ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
convert_to_long_ex(timeout);
   FD_ZERO(&rfds);   FD_SET(PQsocket(pgsql), &rfds);
   tv.tv_sec = Z_STRVAL_PP(timeout);   tv.tv_usec = 0;
   retval = select(1, &rfds, NULL, NULL, &tv);   if(retval) {       PQconsumeInput(pgsql);       notify =
PQnotifies(pgsql);      if(notify) {           nbytes = strlen(notify->relname)+1;           buf = emalloc(nbytes);
     memcpy(buf, notify->relname, nbytes);           free(notify);
 
    /* ... */
       }   } else {       printf("Timed out.  Socket==%d\n", PQsocket(pgsql));       RETURN_FALSE;   }

This always seems to time out.  Is there some mode that I need to put
the backend into in order to make the socket valid?  I'm getting a
non-stdio/stdout/stderr value back from PQsocket, so things can't be
too messed up.

The following code seems to work, but polls--we would much rather
block on select().
   while(trycount < Z_STRVAL_PP(timeout)) {       PQconsumeInput(pgsql);       notify = PQnotifies(pgsql);
if(notify){           nbytes = strlen(notify->relname)+1;           buf = emalloc(nbytes);           memcpy(buf,
notify->relname,nbytes);           free(notify);
 
    /* ... */       }       sleep(1);       trycount++;   }


Anyone have any ideas?

-- 
Adam Haberlach            |A cat spends her life conflicted between a
adam@newsnipple.com       |deep, passionate, and profound desire for
http://www.newsnipple.com |fish and an equally deep, passionate, and
'88 EX500                 |profound desire to avoid getting wet.


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

Предыдущее
От: "Johann Zuschlag"
Дата:
Сообщение: Re: wrong values in ODBC parameters?
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: wrong values in ODBC parameters?