asynchronous api questions

Started by Nulik Nolover 14 years ago2 messagesgeneral
Jump to latest
#1Nulik Nol
nuliknol@gmail.com

Hi,

I have 2 questions regarding the asynchronous C api (I am using vers. 8.4):

1) To make a connection in non-blocking manner the api provides PGconn
*PQconnectStart(const char *conninfo) function. The parameters are
passed in 'conninfo' variable which is a string so I have to use
sprintf() to put the parameters into this string. Is there another
function to connect asynchronously that would be similar to
PQsetdbLogin so it would accept the host/port/user/password parameters
directly as argument to the function? I want to avoid to use sprintf()

2) Will this code produce a valid non-blocking connection ?

db_globals=PQsetdbLogin(DT_DBHOST,DT_DBPORT,NULL,NULL,"global",DT_DBUSER,DT_DBPASS);
if (PQstatus(db_globals) != CONNECTION_OK) {
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(db_globals));
PQfinish(db_globals);
exit(1);
}
if (PQsetnonblocking(db_globals, int arg)!=1) {
printf("can't set global connection to non blocking mode\n");
exit(1);
}

Will appreciate any help

Nulik

#2Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Nulik Nol (#1)
Re: asynchronous api questions

Nulik Nol wrote:

I have 2 questions regarding the asynchronous C api (I am using vers.

8.4):

1) To make a connection in non-blocking manner the api provides PGconn
*PQconnectStart(const char *conninfo) function. The parameters are
passed in 'conninfo' variable which is a string so I have to use
sprintf() to put the parameters into this string. Is there another
function to connect asynchronously that would be similar to
PQsetdbLogin so it would accept the host/port/user/password parameters
directly as argument to the function? I want to avoid to use sprintf()

You can use PQconnectStartParams if you don't want to construct a
conninfo string.

2) Will this code produce a valid non-blocking connection ?

db_globals=PQsetdbLogin(DT_DBHOST,DT_DBPORT,NULL,NULL,"global",DT_DBUSER
,DT_DBPASS);

if (PQstatus(db_globals) != CONNECTION_OK) {
fprintf(stderr, "Connection to database failed: %s",
PQerrorMessage(db_globals));
PQfinish(db_globals);
exit(1);
}
if (PQsetnonblocking(db_globals, int arg)!=1) {
printf("can't set global connection to non blocking mode\n");
exit(1);
}

The resulting connection (db_globals) will not block when you send, but
the
connection procedure itself (PQsetdbLogin) will block.

Yours,
Laurenz Albe