尝试curlPerform时“连接失败:没有缓冲区空间”

时间:2013-09-24 13:51:49

标签: r

我发送curlPerform并将curl.opts设置为

curl.opts = curlOptions(
  httpheader = c(
    'Content-Type'    = "application/x-www-form-urlencoded; charset=UTF-8",
    'Accept'          = "application/json"
  ),
  verbose = FALSE,
  header = TRUE,
  useragent = "RCurl"    
) 

我最终得到错误“无法连接到192.168.141.136:没有缓冲区空间”。 我需要经常运行这个程序好几天,但这发生在大约6分钟后。 有没有办法将缓冲区最大值设置得更高? 或者,有没有办法查看剩余多少“缓冲空间”?如果是这样,我可以将其设置为重新启动R并恢复程序。 请注意,如果程序运行一段时间,停止并且我手动重新启动它,就会发生这种情况。永远不会清除“缓冲区”。我发现清除它的唯一方法是重启R.

如果它有帮助,我也失去了与Rstudio的“连接”,即使我只是用一个单独的R窗口做这个,并且在得到这个错误之后我也失去了与互联网的连接,直到我关闭R

编辑:这是traceback()的部分结果(其余不是问题)

11: fun(structure(list(message = msg, call = sys.call()), class = c(typeName, 
        "GenericCurlError", "error", "condition")))
10: function (type, msg, asError = TRUE) 
    {
        if (!is.character(type)) {
            i = match(type, CURLcodeValues)
            typeName = if (is.na(i)) 
                character()
            else names(CURLcodeValues)[i]
        }
        typeName = gsub("^CURLE_", "", typeName)
        fun = (if (asError) 
            stop
        else warning)
        fun(structure(list(message = msg, call = sys.call()), class = c(typeName, 
            "GenericCurlError", "error", "condition")))
    }(7L, "Failed to connect to 192.168.141.136: No buffer space", 
        TRUE)
9: .Call("R_curl_easy_perform", curl, .opts, isProtected, .encoding, 
       PACKAGE = "RCurl")
8: curlPerform(url = "http://gt-tradeview/House/TradeView/ajax/varys", 
       postfields = mkURL(parameters), .opts = curl.opts, writefunction = r$update, 
       post = 1L, curl = r$curl()) at functiondefinitionsLive.R#211
7: value[[3L]](cond)
6: tryCatchOne(expr, names, parentenv, handlers[[1L]])
5: tryCatchList(expr, classes, parentenv, handlers)

2 个答案:

答案 0 :(得分:1)

问题在于每次调用都会保留句柄,而且从不关闭。要防止这种情况发生,请使用getCurlHandle()获取卷曲句柄,然后使用curl中的dynCurlReader()参数传递该句柄

答案 1 :(得分:0)

我遇到了与getURL命令相同的问题。我尝试过CloseAllConnections(),但这似乎不起作用。

当我重新启动R会话时,问题自动得到解决。但是,我必须承认,当我的RStudio(R Session)打开了很长时间后,我遇到了这个问题。可能是空R会话的一些内存使用