Colin Cross | 1371fe4 | 2019-03-19 21:08:48 -0700 | [diff] [blame] | 1 | // Copyright 2018 The Go Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Dan Willemsen | b8ef64a | 2023-04-04 01:48:15 -0400 | [diff] [blame^] | 5 | //go:build dragonfly || freebsd || linux || netbsd || (openbsd && mips64) |
Colin Cross | 1371fe4 | 2019-03-19 21:08:48 -0700 | [diff] [blame] | 6 | |
| 7 | package poll |
| 8 | |
| 9 | import ( |
| 10 | "syscall" |
| 11 | "unsafe" |
| 12 | ) |
| 13 | |
| 14 | func writev(fd int, iovecs []syscall.Iovec) (uintptr, error) { |
Patrice Arruda | 7f4776e | 2020-06-25 11:55:41 -0700 | [diff] [blame] | 15 | var ( |
| 16 | r uintptr |
| 17 | e syscall.Errno |
| 18 | ) |
| 19 | for { |
| 20 | r, _, e = syscall.Syscall(syscall.SYS_WRITEV, uintptr(fd), uintptr(unsafe.Pointer(&iovecs[0])), uintptr(len(iovecs))) |
| 21 | if e != syscall.EINTR { |
| 22 | break |
| 23 | } |
| 24 | } |
Colin Cross | 1371fe4 | 2019-03-19 21:08:48 -0700 | [diff] [blame] | 25 | if e != 0 { |
Patrice Arruda | 7f4776e | 2020-06-25 11:55:41 -0700 | [diff] [blame] | 26 | return r, e |
Colin Cross | 1371fe4 | 2019-03-19 21:08:48 -0700 | [diff] [blame] | 27 | } |
| 28 | return r, nil |
| 29 | } |