当前位置: > > > > 设置 ipv4.PacketConn 操作系统接收缓冲区的大小
来源:stackoverflow
2024-04-22 12:48:37
0浏览
收藏
本篇文章给大家分享《设置 ipv4.PacketConn 操作系统接收缓冲区的大小》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。
问题内容
我曾经使用 net.UDPConn
读取和写入 UDP
消息,其中我可以使用 SetReadBuffer
来更改操作系统的接收缓冲区大小。
由于我需要能够在应用程序发送的 UDP
数据包上设置 TTL
,因此我将移动到 ipv4
包,在该包中我可以对 IP 套接字进行更低级别的访问,并且可以为传出消息设置 TTL
。
但我不知道如何更改 ipv4.PacketConn
上的读取缓冲区大小。
SetReadBuffer
的实现使用连接的文件描述符设置缓冲区,这可能与 ipv4.PacketConn
类似吗?
解决方案
这是在 golang 1.11 及更高版本的 unix 平台上执行此操作的方法:
package main import ( "context" "fmt" "net" "syscall" "golang.org/x/sys/unix" ) func control(network, address string, c syscall.RawConn) error { c.Control(func(fd uintptr) { if err := unix.SetsockoptInt(int(fd), unix.SOL_SOCKET, unix.SO_RCVBUF, 1024*1024); err != nil { fmt.Printf("Set socket receive buffer size failed: %v\n", err) } fmt.Printf("Set socket receive buffer size\n") }) return nil } func main() { lc := net.ListenConfig{Control: control} if _, err := lc.ListenPacket(context.Background(), "udp", "127.0.0.1:9999"); err != nil { fmt.Printf("ListenPacket failed: %v\n", err) } }
。
本篇关于《设置 ipv4.PacketConn 操作系统接收缓冲区的大小》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注公众号!