Symbian and libcurl
Date: Wed, 22 Jul 2009 08:31:53 -0700
I have been using libcurl (7.19.4) to write code for a Nokia N97 device which runs the Symbian 5th edition software. This has gone well considering how little I knew about libcurl (just used the curl command line utility in the past to good effect) and Symbian (I didn't know anything about it before I did this project) with one exception that I've worked around. It appears to be a bug in the open-c layer that ultimately talks to the underlying Symbian o/s. I pass this on simply to alert others although if anyone has suggestions on how to further debug this or alternative workarounds they would be gratefully accepted.
The problem arises when first using libcurl and seems to be a timing issue between open-c and the underlying o/s. In connect.c, the function singleipconnect, connect fails on the first call when I do my first HTTP request using the easy interface. The code goes through to the case EAGAIN and calls waitconnect(). waitconnect() returns with a WAITCONN_FDSET_ERROR.
I added the following, admittedly fairly silly, code to work around this issue. This code path only happens the first time singleipconnect is called and seems to never happen again.
if (rc == WAITCONN_FDSET_ERROR)
// On Nokia N97, waitconnect may not do the wait if sockets are not ready (?!!)
// it was observed that adding delay fixes the problem
int delay = 1000;
infof(data, " waitconnect returned %d, waiting %d ms to repeat", rc, delay);
rc = waitconnect(sockfd, timeout_ms);
The second call to waitconnect in this #ifdef works. I had tried shorter wait times and they worked but I wanted to ensure that this problem wouldn't occur at all so I bumped the time up to 1 second. I was hoping to get a newer version of the firmware to try this against to see if the problem goes away but haven't seen a newer version up to this point.
That's all I've tracked down up to this point. It was somewhat difficult to track down because when I was stepping through with the debugger I'd effect the timing and the problem would disappear.
Received on 2009-07-22