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

我正在编写udp客户端,并通过SetWriteBuffer设置udp套接字发送缓冲区。 </ p>

  addr,_:= net.ResolveUDPAddr(“ udp”,“:8089”)
conn,err:= net.DialUDP(“ udp”,nil,addr )
err = conn.SetWriteBuffer(64 * 1024 * 1024)
</ code> </ pre>

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

谢谢大家。</ p>
</ div>

展开原文

原文

I'm writing a udp client and set udp socket send buffer by SetWriteBuffer.

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

as above, how can I test set the value is effective or get the send buffer value after call SetWriteBuffer function.
Thank you all.

dongxin1999
dongxin1999 我已经浏览了有关net软件包的golang软件包,但是没有看到GetWriteBuffer()方法。
3 年多之前 回复
doujionggan9570
doujionggan9570 您是否考虑过查阅文档?当然有一个GetWriteBuffer()方法吗?
3 年多之前 回复

2个回答



在查看了净程序包代码之后,看起来SetWriteBuffer对setsockopt(用于posix)进行了系统调用。 GetWriteBuffer没有类似的功能。 我能想到的唯一方法是像这样对getsockopt进行另一个系统调用。</ p>

  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()
</ code> </ pre>
</ div >

展开原文

原文

After looking at the net package code, it looks like SetWriteBuffer makes a syscall to setsockopt (for posix). There is no similar function for GetWriteBuffer. The only way i can think to do this is by making another syscall to getsockopt like so.

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()

doutangtan6386
doutangtan6386 它工作正常,非常感谢,并且get值是设置的缓冲区值的两倍
3 年多之前 回复



检查 SetWriteBuffer </ code>返回的错误值。 例如,</ p>

 包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)
}
}
</ code> </ pre>
</ div>

展开原文

原文

Check the error value returned by SetWriteBuffer. For example,

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)
    }
}

dongyi2159
dongyi2159 是的,我使用它并且没有错误输出,并且在设置udp缓冲区后有任何方法来获取发送缓冲区的值。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐