我有一台服务器并启动goroutine来发送数据.像这样的代码
func handleSend(conn *net.TcpConn, ch <-chan []byte) {
for {
select {
case msg, ok := <-ch:
if !ok {
return
}
n, err := conn.Write(msg)
if err != nil {
log.Error("conn write error", err)
return
}
//here
}
}
}
Run Code Online (Sandbox Code Playgroud)
今天,我想我应该检查n返回,conn.Write以确保msg完全写入.所以我在这个地方添加了以下代码here
for ;n!= len(msg);{
log.Error("conn write not completely", len(msg), "actually", n)
msg = msg[n:]
n, err = sess.conn.Write(msg)
if err != nil {
log.Error("conn write error", err)
return
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道这样做是对的吗?PS如果对等体缓慢接收消息并Write返回只有部分数据成功发送,该怎么办?