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个字节没有读取

我想知道为什么会无法再回调该函数了呢, 这个几率出现的概率比较多
在高并发的情况下,差不多一个小时出现一次, 请高手们帮帮忙


...全文
1058 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,655

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧