gpt4 book ai didi

go - 设置ipv4.PacketConn的操作系统接收缓冲区的大小

转载 作者:行者123 更新时间:2023-12-03 10:09:36 39 4
gpt4 key购买 nike

我曾经使用UDP读写net.UDPConn消息,在这里我可以使用SetReadBuffer更改操作系统的接收缓冲区大小。
因为我需要能够在应用程序正在发送的TTL数据包上设置UDP,所以我将移至 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)
}
}
Golang playground

关于go - 设置ipv4.PacketConn的操作系统接收缓冲区的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64459394/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com