来自libssh2_channel_write_ex
手册页:
写入的实际字节数或 失败时消极。 LIBSSH2_ERROR_EAGAIN什么时候会 否则阻止。而 LIBSSH2_ERROR_EAGAIN是否定的 数字,这不是真的失败 本身。
现在我遇到了问题。当我收到LIBSSH2_ERROR_EAGAIN
时,是否表示没有发送任何内容,我必须重新发送所有数据?或者是否意味着已经发送了一些数据
我的问题是,如果我正在尝试发送底层套接字可以容纳的更多数据,write()
无论如何都应该阻止,从此我怎么能希望在不获取{{1}的情况下发送大块数据每一次?
答案 0 :(得分:3)
LIBSSH2_ERROR_EAGAIN如果没有数据已发送到缓冲区,则会发生。您可以使用Select()检查套接字是否处于活动状态后再次发送。 如果Select()返回事件,您可以适当地处理它,然后重新发送它。
循环就像这样
do
{
While (rc = libssh2_Channel_write_ex () == LIBSSH2_ERROR_AGAIN )
{
if(!select()) // Wait for timeout
//Timeout
}
if(rc>0)
//Read next set of data into buffer for sending
else if(rc <0)
// Libssh2 error
}
答案 1 :(得分:2)
LIBSSH2_ERROR_EAGAIN表示没有发送任何内容,您必须再次发送。如果发送了某些内容,则会返回该号码。