[cups-devel] IPP requests: Non-blocking or short timeout
Michael Sweet
msweet at apple.com
Tue Sep 13 09:10:49 PDT 2016
Till,
> On Sep 12, 2016, at 9:33 AM, Till Kamppeter <till.kamppeter at gmail.com> wrote:
>
> Thank you very much for the help.
>
> On 09/11/2016 03:22 PM, Michael Sweet wrote:
>> The httpSetTimeout function can be used to manipulate the default read timeout for a given connection. But cupsDoRequest also attempts to reconnect on error (using a connection timeout of 30 seconds) so you might want to use cupsSendRequest and cupsGetResponse yourself to control the reconnect behavior...
>>
>
> I have tried the cupsSendRequest()/cupsGetResponse() now and what happens is that cupsSendRequest() exits immediately with some OK status and cupsGetResponse() hangs for more than one minute with status 100 (HTTP_STATUS_CONTINUE). So the problem is that the server does not answer in time.
Hmm, can you get a packet trace showing the traffic?
> Calling "httpSetTimeout(http, 3, NULL, NULL);" before (3 sec timeout) does not help. Or do I have to define a callback here (which would for example kill the connection after the three seconds which I chosen as timeout). If I need a callback, how should it look like?
The test/ipptool.c program has a fairly sophisticated one, but if you don't specify a callback it should timeout after the 3 seconds you specify.
If you can compile and install CUPS with "--enable-debug-printfs", run cups-browsed (or a test program) against that libcups.so.2 with:
CUPS_DEBUG_LOG=debug.log CUPS_DEBUG_LEVEL=6 CUPS_DEBUG_FILTER="^(http|ipp|cupsDo|cupsGet|cupsSend)" LD_LIBRARY_PATH=/path/to/cups/source/dir/cups cups-browsed-command
then send me the "debug.log" file along with the packet trace. Something isn't right if the timeouts are not working - we depend on it for ipptool's timeout support, for example.
_________________________________________________________
Michael Sweet, Senior Printing System Engineer
More information about the cups-devel
mailing list