package conn
import (
+ "errors"
"net"
- "os"
"syscall"
)
return conn, uaddr.Port, nil
}
-func extractErrno(err error) error {
- opErr, ok := err.(*net.OpError)
- if !ok {
- return nil
- }
- syscallErr, ok := opErr.Err.(*os.SyscallError)
- if !ok {
- return nil
- }
- return syscallErr.Err
-}
-
func createBind(uport uint16) (Bind, uint16, error) {
var err error
var bind nativeBind
port := int(uport)
bind.ipv4, port, err = listenNet("udp4", port)
- if err != nil && extractErrno(err) != syscall.EAFNOSUPPORT {
+ if err != nil && !errors.Is(err, syscall.EAFNOSUPPORT) {
return nil, 0, err
}
bind.ipv6, port, err = listenNet("udp6", port)
- if uport == 0 && err != nil && extractErrno(err) == syscall.EADDRINUSE && tries < 100 {
+ if uport == 0 && err != nil && errors.Is(err, syscall.EADDRINUSE) && tries < 100 {
tries++
goto again
}
- if err != nil && extractErrno(err) != syscall.EAFNOSUPPORT {
+ if err != nil && !errors.Is(err, syscall.EAFNOSUPPORT) {
bind.ipv4.Close()
bind.ipv4 = nil
return nil, 0, err