libcurl的设置CURLOPT_READFUNCTION后,关于无法回调的问题
蜗牛狠邋遢 2012-08-20 11:36:42 设置的CURLOPT_READFUNCTION为 Upload_read
size_t Upload_read( void *ptr, size_t size, size_t nmemb, void *userdata)
{
... ...
n = r->connection->recv(fd, ptr, size*nmemb);
if (n == NGX_AGAIN) {
csrplog(_ERR, "CURL_READFUNC_PAUSE..***..already recv[%u].", userdata->lRecv);
userdata->pause = 1;
return CURL_READFUNC_PAUSE;
}
if (n == NGX_ERROR) {
csrplog(_ERR, "CURL_READFUNC_ABORT..===..");
return CURL_READFUNC_ABORT;
}
userdata->lRecv += n;
csrplog(_ERR, "End...current [%u] already recv[%u].", n, userdata->lRecv);
return n;
}
// 当READFUNCTION的函数被暂停的时候, 有个机制会判断重新打开该函数回调
void httpconnState(....)
{
for(;;) {
... ...
if (userdata->pause == 1) {
curl_easy_pause(userdata->handle, CURLPAUSE_CONT);
}
}
}
问题:上传一个64K的数据,当发送63k数据,还剩1K数据的时候,无法再回调Upload_read函数了,部分日志打印:
<error>: End...current [1448] already recv[1448].
<error>: End...current [2896] already recv[4344].
<error>: End...current [16384] already recv[20728].
<error>: End...current [16384] already recv[37112].
<error>: End...current [16384] already recv[53496].
<error>: End...current [11666] already recv[65162].
<error>: CURL_READFUNC_PAUSE..***..already recv[65162].
还有374个字节没有读取
我想知道为什么会无法再回调该函数了呢, 这个几率出现的概率比较多
在高并发的情况下,差不多一个小时出现一次, 请高手们帮帮忙