Asynchronous interface help?

From: Adam Haberlach <adam(at)newsnipple(dot)com>
To: pgsql-interfaces(at)postgresql(dot)org
Subject: Asynchronous interface help?
Date: 2001-01-02 21:40:30
Message-ID: 20010102134030.A25130@newsnipple.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)newsnipple(dot)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.

Responses

Browse pgsql-interfaces by date

  From Date Subject
Next Message Bruce Momjian 2001-01-02 22:08:17 Re: wrong values in ODBC parameters?
Previous Message Johann Zuschlag 2001-01-02 20:11:05 Re: wrong values in ODBC parameters?