使用libssh2的庫開發ssh客戶端程式,通過session->openchannel,channel_read /channel write的方式實作與centos等服務器的sshd通訊。
目前如果我登錄系統后按exit退出系統,但是客戶端不知道如何回應該連接斷開訊息。
嘗試過注冊libssh2_session_callback_set的回呼函式LIBSSH2_CALLBACK_DISCONNECT,也走不到該回呼中。
在服務器斷開后,channel write還是執行成功(很奇怪),也無法通過該方式判斷連接斷開。
請教各位大佬有什么辦法可以判斷服務器主動斷開連接啊
uj5u.com熱心網友回復:
個人猜測哈, 弄個執行緒 libssh2_channel_wait_closed ?再不行 用底層的 WSAEventSelect 選入& 監視 FD_CLOSE 事件
uj5u.com熱心網友回復:
試試:LIBSSH2_POLLFD_SESSION_CLOSED
LIBSSH2_POLLFD_CHANNEL_CLOSED
uj5u.com熱心網友回復:
服務器斷開需不需要disconnect?如果例外斷開是不是就沒有訊息??uj5u.com熱心網友回復:
https://stackoverflow.com/questions/12981125/libssh2-session-cleanup-without-blocking第二個回答可能有用,他貌似會觸發recv,但是讀到0位元組,通過這個判斷遠程斷開,網路部分貌似和普通的socket差不多,只不過是個協議而已。
uj5u.com熱心網友回復:
我的socket就是用的異步方式,fd close訊息沒回應。關于channel_wait_closed,我看說明,好像是在呼叫close以后在等待關閉成功的。
uj5u.com熱心網友回復:
謝謝,我先看看那兩個函式跟鏈接!
uj5u.com熱心網友回復:
斷開應該都有訊息的吧。我現在測驗不是例外斷開,是正常退出。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/40509.html
標籤:網絡編程
上一篇:小白求助!!!網頁和開發者工具中的顯示為什么不一樣呢!!
下一篇:matlab
