2012-09-25 138 views
0

我正在使用套接字連接連接到C應用程序中的服務器。偶爾服務器不會返回任何東西。我的意思是沒有。所以我的應用程序掛起。我試過使用超時:c應用程序服務器套接字連接掛起

signal(SIGALRM, timeouthandler); 
alarm(myTimeout); 

(socket and connection logic)...  

alarm(0); 

但它仍然掛起並且不返回到腳本。一位同事說,這可能是因爲我正在使用阻止連接。但是從我正在閱讀的內容中可以看出,在連接建立之後,建立了一個非阻塞連接。

我該看什麼?

+0

確保服務器沒有陷入僵局(多線程等),然後確保服務器的發送緩衝區還沒有滿箱。爲此,請確保您的客戶端已經讀取了服務器聲明的所有內容。 – chrisaycock

+0

我正在使用設置爲不返回任何內容的服務器,以便在連接懸掛時在野外模擬。所以我正在尋找我可以在我的代碼中執行的操作來終止連接並在超時達到時繼續前進 – Bill

+0

如果我理解正確,那麼您的客戶端的'read()'不會返回,因爲服務器不是送什麼東西。如果你想去異步路由並允許超時,使用'select()'。您可以使用像libuv這樣更復雜的事件驅動框架,但現在只需從簡單複用開始。 – chrisaycock

回答

0

'我該看什麼?'

作爲一個調試工具,我發現Wireshark在調試套接字連接時非常有用。我已經用C語言完成了一些套接字應用程序,有時候它會涉及到TCP堆棧庫,它們會做一些不可思議的事情,而Wireshark有時可以發現它。

希望這有助於

相關問題