这是我准备读取缓冲区时使用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)
答案 0 :(得分:0)
按事物的方案,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或其他管理缓冲区的方法