第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何知道net包中TCP連接是關(guān)閉的?

如何知道net包中TCP連接是關(guān)閉的?

Go
慕田峪9158850 2021-05-15 11:11:03
我正在實(shí)現(xiàn)一個(gè)小型TCP服務(wù)器。我怎么知道我的一位客戶是否關(guān)門?我應(yīng)該只是嘗試讀取或?qū)懭氩z查是否err為nil?
查看完整描述

2 回答

?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超17個(gè)贊

該線程“的最佳方式可靠地檢測(cè)TCP連接被關(guān)閉”,使用net.Conn了“ c”(也可見于utils/ping.go或locale-backend/server.go或許多其他情況下):


one := make([]byte, 1)

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))

}

為了檢測(cè)超時(shí),建議:


if neterr, ok := err.(net.Error); ok && neterr.Timeout() {

  ...

更新2019:tuxedo25在評(píng)論中提到:


在Go 1.7+中,零字節(jié)讀取立即返回,并且永遠(yuǎn)不會(huì)返回錯(cuò)誤。

您必須至少讀取一個(gè)字節(jié)。


參見commit 5bcdd63并執(zhí)行issue 15735


net:不要io.EOF從零字節(jié)讀取中返回


查看完整回答
反對(duì) 回復(fù) 2021-05-17
?
守著星空守著你

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊

只要嘗試從中讀取,如果關(guān)閉它就會(huì)拋出錯(cuò)誤。如果您愿意,請(qǐng)優(yōu)雅地處理!


付出太多的風(fēng)險(xiǎn):


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

}


查看完整回答
反對(duì) 回復(fù) 2021-05-17
  • 2 回答
  • 0 關(guān)注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)