2013-08-29 17 views
1

我使用libssh 5.5實現了一個SSH服務器。 運行連接到端口22上的服務器的單個ssh客戶端,一切正常。 當我嘗試連接第二個客戶端(我使用PUTTY ssh終端作爲客戶端)時出現問題。在ssh_bind_accept中等待客戶端連接的服務器線程未被激活,並且新開​​啓的(第二個)終端明顯「死亡」(第一個開放的 終端工作正常)。ssh多線程服務器在ssh_bind_accept中保持阻塞

我不知道是否有一些重要的設置,我錯過了。

下面是我進行電話:

1. Create the session: 

    sshbind = ssh_bind_new(); 
    session = ssh_new(); 

2. Call the listen: 

    ssh_bind_listen(sshbind) 

3. Call the accept: 

    ssh_bind_accept(sshbind, session) 

4. Open a putty terminal, which unlocks the *ssh_bind_accept* at step 3 

5. Create a new thread and continue terminal dialogue in newly created thread 

基本上,我公司開發的服務器是基於樣本這裏:How to use libssh as server?

有支持多個客戶端,我有一個聽衆, 和當創建一個連接(從ssh_bind_accept返回)時,我創建了一個新線程並繼續在那裏連接ssh。分叉之後,我創建了新的綁定和會話,並讓自己在ssh_bind accept中等待。 問題是,打開第二個終端,不會導致ssh_bind_accept返回。

回答

0

您是否嘗試在分叉後在子進程中執行ssh_bind_free(sshbind)?在多個進程中同時收聽器文件描述符可能會導致問題。

Aris

+0

這不應該是一個評論嗎? –