来自 libssh2_channel_write_ex
手册页:
Actual number of bytes written or negative on failure. LIBSSH2_ERROR_EAGAIN when it would otherwise block. While LIBSSH2_ERROR_EAGAIN is a negative number, it isn't really a failure per se.
现在我遇到了一个问题。当我收到 LIBSSH2_ERROR_EAGAIN
时,是否意味着未发送任何内容并且我必须重新发送所有数据?或者是否表示已经发送了一些数据
我的问题是,如果我尝试发送底层套接字可以容纳的更多数据,write()
无论如何都应该阻塞,今后我如何希望在不发送大数据 block 的情况下发送大数据 block 每次都得到LIBSSH2_ERROR_EAGAIN
?
最佳答案
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
}
关于c - channel 未阻塞时 libssh2_channel_write 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431392/