libssh で ssh クライアントを実装しようとしています。
libssh doc によると: http://api.libssh.org/stable/group__libssh__channel.html#gae86b0704a1f2bdebb268b55567f7f47b ssh_channel_open_forward は none ブロック モードをサポートしています。
これが私のシーケンスです:
1. ssh_new ()
2. ssh_set_blcoking (session, false)
3. ssh_connect () :None Blocking -> OK
4. ssh_userauth_password (session, NULL, "password") :None Blocking -> OK
5. ssh_channel_new (session)
6. ssh_channel_set_blcoking (channel, 0)
7. ssh_channel_open_foward(...) :Bocking -> NG
MaxOS(X) ssh_channel_open_foward 関数の同じコードがブロックされていないと確信しています。Linux (ubuntu) および Win32 (win7/xp) では、ssh_channel_open_foward がブロックされています。
また、テスト コードを追加します: assert (ssh_is_blocking (session_->session ()) == 0)。アサートは発生しません。つまり、チャネルはすでにブロックなしモードに切り替えられています。しかし、ssh_channel_open_foward は決して SSH_AGAIN を返しません。完全にブロックされています。
どんな助けでも非常に感謝します。