74
									
								
								vendor/golang.org/x/sys/unix/syscall_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										74
									
								
								vendor/golang.org/x/sys/unix/syscall_unix.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -338,8 +338,13 @@ func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
 | 
			
		||||
	var iov [1]Iovec
 | 
			
		||||
	if len(p) > 0 {
 | 
			
		||||
		iov[0].Base = &p[0]
 | 
			
		||||
		iov[0].SetLen(len(p))
 | 
			
		||||
	}
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	n, oobn, recvflags, err = recvmsgRaw(fd, p, oob, flags, &rsa)
 | 
			
		||||
	n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa)
 | 
			
		||||
	// source address is only specified if the socket is unconnected
 | 
			
		||||
	if rsa.Addr.Family != AF_UNSPEC {
 | 
			
		||||
		from, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
@@ -347,12 +352,42 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RecvmsgBuffers receives a message from a socket using the recvmsg
 | 
			
		||||
// system call. The flags are passed to recvmsg. Any non-control data
 | 
			
		||||
// read is scattered into the buffers slices. The results are:
 | 
			
		||||
//   - n is the number of non-control data read into bufs
 | 
			
		||||
//   - oobn is the number of control data read into oob; this may be interpreted using [ParseSocketControlMessage]
 | 
			
		||||
//   - recvflags is flags returned by recvmsg
 | 
			
		||||
//   - from is the address of the sender
 | 
			
		||||
func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) {
 | 
			
		||||
	iov := make([]Iovec, len(buffers))
 | 
			
		||||
	for i := range buffers {
 | 
			
		||||
		if len(buffers[i]) > 0 {
 | 
			
		||||
			iov[i].Base = &buffers[i][0]
 | 
			
		||||
			iov[i].SetLen(len(buffers[i]))
 | 
			
		||||
		} else {
 | 
			
		||||
			iov[i].Base = (*byte)(unsafe.Pointer(&_zero))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var rsa RawSockaddrAny
 | 
			
		||||
	n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa)
 | 
			
		||||
	if err == nil && rsa.Addr.Family != AF_UNSPEC {
 | 
			
		||||
		from, err = anyToSockaddr(fd, &rsa)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) {
 | 
			
		||||
	_, err = SendmsgN(fd, p, oob, to, flags)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) {
 | 
			
		||||
	var iov [1]Iovec
 | 
			
		||||
	if len(p) > 0 {
 | 
			
		||||
		iov[0].Base = &p[0]
 | 
			
		||||
		iov[0].SetLen(len(p))
 | 
			
		||||
	}
 | 
			
		||||
	var ptr unsafe.Pointer
 | 
			
		||||
	var salen _Socklen
 | 
			
		||||
	if to != nil {
 | 
			
		||||
@@ -361,7 +396,32 @@ func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error)
 | 
			
		||||
			return 0, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return sendmsgN(fd, p, oob, ptr, salen, flags)
 | 
			
		||||
	return sendmsgN(fd, iov[:], oob, ptr, salen, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// SendmsgBuffers sends a message on a socket to an address using the sendmsg
 | 
			
		||||
// system call. The flags are passed to sendmsg. Any non-control data written
 | 
			
		||||
// is gathered from buffers. The function returns the number of bytes written
 | 
			
		||||
// to the socket.
 | 
			
		||||
func SendmsgBuffers(fd int, buffers [][]byte, oob []byte, to Sockaddr, flags int) (n int, err error) {
 | 
			
		||||
	iov := make([]Iovec, len(buffers))
 | 
			
		||||
	for i := range buffers {
 | 
			
		||||
		if len(buffers[i]) > 0 {
 | 
			
		||||
			iov[i].Base = &buffers[i][0]
 | 
			
		||||
			iov[i].SetLen(len(buffers[i]))
 | 
			
		||||
		} else {
 | 
			
		||||
			iov[i].Base = (*byte)(unsafe.Pointer(&_zero))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	var ptr unsafe.Pointer
 | 
			
		||||
	var salen _Socklen
 | 
			
		||||
	if to != nil {
 | 
			
		||||
		ptr, salen, err = to.sockaddr()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return 0, err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return sendmsgN(fd, iov, oob, ptr, salen, flags)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Send(s int, buf []byte, flags int) (err error) {
 | 
			
		||||
@@ -484,3 +544,13 @@ func Lutimes(path string, tv []Timeval) error {
 | 
			
		||||
	}
 | 
			
		||||
	return UtimesNanoAt(AT_FDCWD, path, ts, AT_SYMLINK_NOFOLLOW)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// emptyIovec reports whether there are no bytes in the slice of Iovec.
 | 
			
		||||
func emptyIovecs(iov []Iovec) bool {
 | 
			
		||||
	for i := range iov {
 | 
			
		||||
		if iov[i].Len > 0 {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user