请看下面的代码:
package main import "net" import "log" import "bufio" import "time"当程序启动后,我使用telnet连接localhost:8888,在3秒后服务器将会强制关闭我的连接,但是当我用netstat查看时,套接字状态仍然是ESTABLISHED。如果我移除File()函数,套接字就可以正常关闭。请问我该如何解决这个问题?
func main() { l,_:=net.Listen("tcp", ":8888") for { conn, _ := l.Accept() log.Println("已连接:", conn.RemoteAddr()) go func() { f, _:=conn.(*net.TCPConn).File() d:=f.Fd() log.Println(d) f.Close() arr := make([]byte, 1000) reader := bufio.NewReader(conn) time.AfterFunc(3*time.Second, func() { log.Println("关闭连接:", conn.RemoteAddr()) conn.Close() }) for { size, err := reader.Read(arr) if err != nil { break } log.Println("sss", arr[:size]) } }() } }
if err != nil {log.Fatal(err)}
。如果你忽略了Listen
、Accept
(或Close
)或File()
中的某些错误,那么其他人看你的代码时就会想知道是否有错误被忽略了。请确保代码的健壮性和可靠性。 - Dave Cdefer f.Close()
吗? - Pandemonium