| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| //go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris | |
| package socket | |
| import ( | |
| "syscall" | |
| ) | |
| // ioComplete checks the flags and result of a syscall, to be used as return | |
| // value in a syscall.RawConn.Read or Write callback. | |
| func ioComplete(flags int, operr error) bool { | |
| if flags&syscall.MSG_DONTWAIT != 0 { | |
| // Caller explicitly said don't wait, so always return immediately. | |
| return true | |
| } | |
| if operr == syscall.EAGAIN || operr == syscall.EWOULDBLOCK { | |
| // No data available, block for I/O and try again. | |
| return false | |
| } | |
| return true | |
| } |