Informix ESQL/C seems to block
Posted in 1996
To All: (sorry for the length but this a complicated question) A not so brief discussion of our product. We are developing a server application that runs on various UNIX platforms and Windows NT. It services several concurrent client connections that wish to passthrough to the Informix ONLine engine on another remote machine. Essentially our server application manages multiple connections to it and each connection will establish a connection to the Informix engine. Each of our connections are managed within the application by our own scheduling algorythm, if any of these connections call into a blocking function such as the ESQL/C generated code to execute SQL requests the whole application blocks until the ESQL/C call returns. This is bad news when the application is trying to service 100+ conections all trying to retrieve data from Informix. Essentially it appears as though ESQL/C is a blocking client API. I have explored setting up KAIO on our HP-UX machine where the Informix Engine is running and to no avail the ESQL/C portion of the application still blocks. Informix Technical support really did not provide any reasonable answers as to whether ESQL/C v7.2 is a blocking API. They said tweak the KAIO on the server and also the priority in the ONCONFIG file. Each of these still produced a blocking API. Now for the question....... Can anyone in the Informix User Community tell me whether the Informix client API is blocking API or not? If it is then I am going to have to jump through a lot of hoops to produce a non-blocking application. A quick side note, Sybase CT-Library and DB-Library both are non-blocking on all platforms. The latest Oracle OCI client API is also reputed to be a non-blocking API. Also the ODBC architecture provides for asynchronous statements and connections. Essentially the ODBC model is very simple. Make an SQLExecute() call and if it returns SQL_STILL_EXECUTING then call it again until the function returns SQL_SUCCESS or SQL_ERROR. This allows the programmer to yield to other components of the application so that they may do the work they need to do such as field other client connections. Thanks for your help in this matter, Ken Crismon