我有代碼(我使用 https://github.com/fiorix/go-smpp):// -----------------------------------------------// handleConnection new clients.// -----------------------------------------------func (_srv *ServerSmpp) handleConnection(_cfg *ConfigSmpp, c *conn) { defer c.Close() if err := _srv.auth(_cfg, c); err != nil { if err != io.EOF { log.Printf("smpp_server: server auth failed: %s\n", err) } return } notify := make(chan error) go func() { for { pb, err := c.Read() if err != nil { notify <- err return } err = _srv.Handler(_srv.RemoteProvider, c, pb) if err != nil { fmt.Printf("%s\n", err) notify <- err return } } }() for { select { case err:= <-notify: if io.EOF == err { fmt.Printf("Smpp server (read): %s\n", err) return } case <-time.After(time.Second * 10): fmt.Printf("Client disconnected by timeout.\n") return } }}調用的句柄連接的代碼:func (_srv *ServerSmpp) Serve(_cfg *ConfigSmpp) { for { client, err := _srv.NetListener.Accept() if err != nil { break } c := newConn(client) go _srv.handleConnection(_cfg, c) }}當此代碼工作時,服務器會在超時 10 秒之前斷開所有客戶端的連接,但是當客戶端不起作用 10 秒時,我該如何斷開連接呢?
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
您的對象似乎是一個 ,在
阻止之前,選擇一種使用適當值進行調用的方式:clientnet.Connclient.SetReadDeadline()time.Timeclient.Read()
c.client.SetDeadline( time.Now().Add(10 * time.Second )
pb, err := c.Read() { ...
- 1 回答
- 0 關注
- 132 瀏覽
添加回答
舉報
0/150
提交
取消