2016-01-19 109 views
0

在Golang中,我可以close a TCPListener,但是,我無法分辨TCPListener是否已關閉。這個信息可以用來做一些其他的程序邏輯。如何判斷tcplistener是否已關閉?

+0

如果你是關閉它的人,不要」你知道它是否關閉?如果您真的想要,可以從中讀取並檢查錯誤。 – JimB

+0

@JimB,我明白了。但是,我的意思是,像'Closed()'這樣的'golang'中是否存在已經存在的標誌函數來檢查。 – andy

+0

假設你需要知道監聽器是否關閉,那是因爲你想調用Accept,在這種情況下,只需調用accept並查看是否有錯誤(因爲可能存在其他錯誤條件)。如果你沒有爲了調用Accept而進行檢查,那是因爲程序中的一些其他邏輯應該單獨處理,而不是耦合到監聽器。 – JimB

回答

0

你可以撥打到插座中使用它之前:

_, err = net.Dial("tcp", "127.0.0.1:8021") //8021 is a closed socket 
if err != nil { 
    panic("Error, socket not opened") 
} 

編輯: 也許這種方式是比較明確的:

isOpen := true 
_, err = net.Dial("tcp", "127.0.0.1:8021") //8021 is a closed socket 
if err != nil { 
    isOpen = false 
} 

if isOpen { 
    //Your logic here 
} 
+0

我的意思是我們可以在服務器代碼中測試它。 – andy

+0

抱歉,但我擔心我不理解您的評論。我在Go中發佈的代碼片段只會嘗試打開指定主機和端口的套接字。如果該tcp主機和端口處於打開狀態,則err將爲零,並在關閉或不存在時拋出錯誤。我編輯了答案 – MaC

相關問題