handle: ability for force receive buffer size

This uses `SO_RCVBUFFORCE` instead of `SO_RCVBUF`. This requires to be
root and Linux 2.6.14.
This commit is contained in:
Vincent Bernat 2017-09-12 08:38:42 +02:00 committed by Vish (Ishaya) Abrams
parent ef84ebb87b
commit 808afc82b2
2 changed files with 7 additions and 3 deletions

View File

@ -58,10 +58,14 @@ func (h *Handle) SetSocketTimeout(to time.Duration) error {
// SetSocketReceiveBufferSize sets the receive buffer size for each
// socket in the netlink handle. The maximum value is capped by
// /proc/sys/net/core/rmem_max.
func (h *Handle) SetSocketReceiveBufferSize(size int) error {
func (h *Handle) SetSocketReceiveBufferSize(size int, force bool) error {
opt := syscall.SO_RCVBUF
if force {
opt = syscall.SO_RCVBUFFORCE
}
for _, sh := range h.sockets {
fd := sh.Socket.GetFd()
err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_RCVBUF, size)
err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, opt, size)
if err != nil {
return err
}

View File

@ -138,7 +138,7 @@ func TestHandleReceiveBuffer(t *testing.T) {
t.Fatal(err)
}
defer h.Delete()
if err := h.SetSocketReceiveBufferSize(65536); err != nil {
if err := h.SetSocketReceiveBufferSize(65536, false); err != nil {
t.Fatal(err)
}
sizes, err := h.GetSocketReceiveBufferSize()