fd_writev_unix.mx raw

   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  
   5  //go:build dragonfly || freebsd || linux || netbsd || (openbsd && mips64)
   6  
   7  package poll
   8  
   9  import (
  10  	"syscall"
  11  	"unsafe"
  12  )
  13  
  14  func writev(fd int, iovecs []syscall.Iovec) (uintptr, error) {
  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  	}
  25  	if e != 0 {
  26  		return r, e
  27  	}
  28  	return r, nil
  29  }
  30