回答
該線程「 (utils/ping.go
或locale-backend/server.go
或many other instances):
net.Conn
作爲'
one := []byte{}
c.SetReadDeadline(time.Now())
if _, err := c.Read(one); err == io.EOF {
l.Printf(logger.LevelDebug, "%s detected closed LAN connection", id)
c.Close()
c = nil
} else {
var zero time.Time
c.SetReadDeadline(time.Now().Add(10 * time.Millisecond))
}
爲了檢測超時,它表明:
if neterr, ok := err.(net.Error); ok && neterr.Timeout() {
...
變量'one'是什麼?大小爲零的片段是有意義的。 – ReyCharles
@ReyCharles字節'b []字節片(可能讀至少一個字節,因此然後名稱) – VonC
如何使用大小爲零的片?那麼沒有人會讀,我們只會檢查超時。 'zero:= make([] byte,0); ... c.Read(零); ...' – ReyCharles
試着從中讀取它,如果它關閉,它會拋出一個錯誤。如果你願意,可以優雅地處理!
對於讓步太多風險:
func Read(c *net.Conn, buffer []byte) bool {
bytesRead, err := c.Read(buffer)
if err != nil {
c.Close()
log.Println(err)
return false
}
log.Println("Read ", bytesRead, " bytes")
return true
}
繼承人一個很好的介紹瞭如何使用網包,使一個小TCP「聊天服務器」:
http://www.badgerr.co.uk/2011/06/20/golang-away-tcp-chat-server/
_, err := conn.Read(make([]byte, 0))
if err!=io.EOF{
// this connection is invalid
logger.W("conn closed....",err)
}else{
byt, _:= ioutil.ReadAll(conn);
}
- 1. 如何知道網絡是否連接?
- 2. 如何知道客戶端是否已關閉連接?
- 3. 如何通過網絡管道正確關閉網絡連接?
- 4. java.net.SocketException:套接字已關閉TCP連接
- 5. 如何知道在java中是否完成了tcp連接?
- 6. 如何關閉已建立的網絡連接?
- 7. 網絡連接關閉
- 8. 如何關閉iPhone互聯網和數據包網絡連接?
- 9. 扭曲:如何知道哪個客戶端已關閉連接
- 10. 我如何知道我的捲髮代理是否已關閉?
- 11. 如何知道DOM是否關閉?
- 12. 如何知道流是否關閉?
- 13. 如何知道JDialog是否關閉?
- 14. Android - 如何知道TCP連接是否仍然打開
- 15. 如何中止「關閉」TCP連接?
- 16. 如何知道UdpClient是否已關閉/處置?
- 17. Android,我如何知道應用程序是否已關閉
- 18. PHP知道連接何時關閉嗎?
- 19. 如何確定是否連接到套接字已關閉
- 20. 如何知道連接的無線網絡是否有圍牆加固(Captive Portal)?
- 21. Python錯誤:連接中止 - 網絡已關閉
- 22. 如何知道socket.Io是否連接android
- 23. AS3 - 如何關閉tcp連接?
- 24. telnet如何關閉tcp連接?
- 25. 如何知道進程是否正在使用網絡接口?
- 26. 如何知道android中網絡連接的變化
- 27. 如何知道Josso 1是否已成功連接到LDAP?
- 28. 如何知道服務容器是否已準備好連接?
- 29. PHP:如何知道PostgreSQL持久連接是否已經打開?
- 30. 如何知道連接是否已經進行
你有沒有看近[錯誤](http://golang.org/pkg/net/#Error)? – tomahh
@TomAhh超時?這很簡單。 – liuyanghejerry