这是我准备读取缓冲区时使用golang的代码:
func Listen() {
listen, _ := net.Listen("tcp4", "127.0.0.1:7000")
defer listen.Close()
for {
conn, _ := listen.Accept()
go handler(&conn)
}
}
func handler(c *net.Conn) {
for {
buf := make([]byte, 1464)
n, _ := (*c).Read(buf)
if n == 0 {
continue
}
}
}
1464 是我的网络 mtu 1492 - 28 IP 报头,那么我应该在这里输入哪个号码?
我的网络使用 ppoe 协议,所以默认值是 (1518 - 18 - 8( 8 是 ppoe 协议标头,rasult 是 1492,那么我应该在那里输入哪个数字 1492 或 1464?(1492-28(
在方案中,1464 与 1492 并没有太大的区别,所以选择更大的一个。 也许增加一点净空!
如果您想要大小恰到好处的超紧密缓冲区,请执行此类操作
func handler(c *net.Conn) {
maxSize:=1464
for {
buf := make([]byte, maxSize)
n, _ := (*c).Read(buf)
if n == 0 {
continue
}
if n > maxSize {
maxSize=n
}
}
它会调整。 NB make(( 是一个相对昂贵的调用,所以你可能想看看 sync.pool 或其他方法来管理缓冲区