To retrieve MTU on aix/ppc64, a socket must be created. Previously, this
socket was recreated for each interface and not close at all, causing a
fd leak on software using interface API.
Change-Id: Ib573e234bfce58964935831b68d007bfbd923476
Reviewed-on: https://go-review.googlesource.com/c/go/+/165397
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
package net
import (
+ "internal/poll"
"internal/syscall/unix"
"syscall"
"unsafe"
return nil, err
}
+ sock, err := sysSocket(syscall.AF_INET, syscall.SOCK_DGRAM, 0)
+ if err != nil {
+ return nil, err
+ }
+ defer poll.CloseFunc(sock)
+
var ift []Interface
for len(tab) > 0 {
ifm := (*syscall.IfMsgHdr)(unsafe.Pointer(&tab[0]))
// Retrieve MTU
ifr := &ifreq{}
copy(ifr.Name[:], ifi.Name)
- sock, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, 0)
- if err != nil {
- return nil, err
- }
err = unix.Ioctl(sock, syscall.SIOCGIFMTU, uintptr(unsafe.Pointer(ifr)))
if err != nil {
return nil, err