golang获取udp套接字缓冲区大小

时间:2017-04-17 11:22:11

标签: sockets go udp buffer

我正在编写一个udp客户端并通过SetWriteBuffer设置udp套接字发送缓冲区。

   addr, _ := net.ResolveUDPAddr("udp", ":8089")
   conn, err :=net.DialUDP("udp", nil, addr)  
   err =conn.SetWriteBuffer(64*1024*1024)

如上所述,如何在调用SetWriteBuffer函数后测试设置值是否有效或获取发送缓冲区值。
谢谢大家。

2 个答案:

答案 0 :(得分:1)

检查SetWriteBuffer返回的错误值。例如,

package main

import (
    "log"
    "net"
)

func main() {
    addr, err := net.ResolveUDPAddr("udp", ":8089")
    conn, err := net.DialUDP("udp", nil, addr)

    err = conn.SetWriteBuffer(64 * 1024 * 1024)
    if err != nil {
        log.Print(err)
    }
}

答案 1 :(得分:1)

在查看网络包代码之后,看起来SetWriteBuffer对setsockopt(对于posix)进行系统调用。 GetWriteBuffer没有类似的功能。我能想到的唯一方法就是通过另外一个系统调用来实现getockopt。

addr, _ := net.ResolveUDPAddr("udp", ":8089")
conn, _ := net.DialUDP("udp", nil, addr)
conn.SetWriteBuffer(10 * 1024)
fd, _ := conn.File()
value, _ := syscall.GetsockoptInt(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_SNDBUF)
log.Println(value)
fd.Close()
conn.Close()