從libssh2_channel_write_ex
手冊頁:行爲當信道沒有阻止
寫入的實際字節數或 負上失敗。 LIBSSH2_ERROR_EAGAIN當它會 否則阻止。雖然 LIBSSH2_ERROR_EAGAIN是一個負數 號碼,但它不是真的每 se失敗。
現在我有一個問題。當我收到LIBSSH2_ERROR_EAGAIN
這是否意味着什麼都沒有發送,我必須重新發送所有數據?或這是否意味着一些數據已發送
我的問題是,如果我試圖發送更多的數據,底層套接字可以容納,write()
應該阻止,因此我希望如何發送一大塊數據沒有得到LIBSSH2_ERROR_EAGAIN
每次?
您是否能以'setsockopt的(2)'插座上'SO_SNDBUF'要發送的數據的大塊過嗎? – sarnold 2011-03-25 10:51:47
@sarnold:其實我並沒有試圖發送大量的數據,但是我一次就在幾個開放的頻道上發送數據。你的意思是我應該確保所有通道緩衝區大小的總和應該小於底層套接字緩衝區大小? – kriss 2011-03-25 11:23:41
我認爲如果你試圖填充一個內核發送緩衝區(例如'write(2)'將返回一個小於你傳遞的緩衝區的長度的值),你應該只是簡短地寫一次,所以它應該全部「只是工作「,如果你已經寫了你的代碼來準備潛在的短文寫作。但是我以前從來沒有使用過libssh2庫,並且我沒有足夠的信心去說明它會做什麼。 :)我只是想,如果你知道你要發送的最大塊是32k,那麼確保緩衝區足夠大,以便在一個'write(2)'中處理它。 – sarnold 2011-03-25 11:39:53