Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

80 linhas
1.8 KiB

  1. // Copyright 2021 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. // illumos system calls not present on Solaris.
  5. //go:build amd64 && illumos
  6. // +build amd64,illumos
  7. package unix
  8. import (
  9. "unsafe"
  10. )
  11. func bytes2iovec(bs [][]byte) []Iovec {
  12. iovecs := make([]Iovec, len(bs))
  13. for i, b := range bs {
  14. iovecs[i].SetLen(len(b))
  15. if len(b) > 0 {
  16. iovecs[i].Base = &b[0]
  17. } else {
  18. iovecs[i].Base = (*byte)(unsafe.Pointer(&_zero))
  19. }
  20. }
  21. return iovecs
  22. }
  23. //sys readv(fd int, iovs []Iovec) (n int, err error)
  24. func Readv(fd int, iovs [][]byte) (n int, err error) {
  25. iovecs := bytes2iovec(iovs)
  26. n, err = readv(fd, iovecs)
  27. return n, err
  28. }
  29. //sys preadv(fd int, iovs []Iovec, off int64) (n int, err error)
  30. func Preadv(fd int, iovs [][]byte, off int64) (n int, err error) {
  31. iovecs := bytes2iovec(iovs)
  32. n, err = preadv(fd, iovecs, off)
  33. return n, err
  34. }
  35. //sys writev(fd int, iovs []Iovec) (n int, err error)
  36. func Writev(fd int, iovs [][]byte) (n int, err error) {
  37. iovecs := bytes2iovec(iovs)
  38. n, err = writev(fd, iovecs)
  39. return n, err
  40. }
  41. //sys pwritev(fd int, iovs []Iovec, off int64) (n int, err error)
  42. func Pwritev(fd int, iovs [][]byte, off int64) (n int, err error) {
  43. iovecs := bytes2iovec(iovs)
  44. n, err = pwritev(fd, iovecs, off)
  45. return n, err
  46. }
  47. //sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) = libsocket.accept4
  48. func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) {
  49. var rsa RawSockaddrAny
  50. var len _Socklen = SizeofSockaddrAny
  51. nfd, err = accept4(fd, &rsa, &len, flags)
  52. if err != nil {
  53. return
  54. }
  55. if len > SizeofSockaddrAny {
  56. panic("RawSockaddrAny too small")
  57. }
  58. sa, err = anyToSockaddr(fd, &rsa)
  59. if err != nil {
  60. Close(nfd)
  61. nfd = 0
  62. }
  63. return
  64. }