Ignore:
Timestamp:
Sep 13, 2023, 10:49:50 AM (21 months ago)
Author:
Izuru Yakumo
Message:

Ready to release 0.6.0

Signed-off-by: Izuru Yakumo <yakumo.izuru@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/vendor/golang.org/x/sys/unix/syscall_aix.go

    r67 r69  
    219219
    220220func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
    221         // Recvmsg not implemented on AIX
    222         return -1, -1, -1, ENOSYS
     221        var msg Msghdr
     222        msg.Name = (*byte)(unsafe.Pointer(rsa))
     223        msg.Namelen = uint32(SizeofSockaddrAny)
     224        var dummy byte
     225        if len(oob) > 0 {
     226                // receive at least one normal byte
     227                if emptyIovecs(iov) {
     228                        var iova [1]Iovec
     229                        iova[0].Base = &dummy
     230                        iova[0].SetLen(1)
     231                        iov = iova[:]
     232                }
     233                msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
     234                msg.SetControllen(len(oob))
     235        }
     236        if len(iov) > 0 {
     237                msg.Iov = &iov[0]
     238                msg.SetIovlen(len(iov))
     239        }
     240        if n, err = recvmsg(fd, &msg, flags); n == -1 {
     241                return
     242        }
     243        oobn = int(msg.Controllen)
     244        recvflags = int(msg.Flags)
     245        return
    223246}
    224247
    225248func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
    226         // SendmsgN not implemented on AIX
    227         return -1, ENOSYS
     249        var msg Msghdr
     250        msg.Name = (*byte)(unsafe.Pointer(ptr))
     251        msg.Namelen = uint32(salen)
     252        var dummy byte
     253        var empty bool
     254        if len(oob) > 0 {
     255                // send at least one normal byte
     256                empty = emptyIovecs(iov)
     257                if empty {
     258                        var iova [1]Iovec
     259                        iova[0].Base = &dummy
     260                        iova[0].SetLen(1)
     261                        iov = iova[:]
     262                }
     263                msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
     264                msg.SetControllen(len(oob))
     265        }
     266        if len(iov) > 0 {
     267                msg.Iov = &iov[0]
     268                msg.SetIovlen(len(iov))
     269        }
     270        if n, err = sendmsg(fd, &msg, flags); err != nil {
     271                return 0, err
     272        }
     273        if len(oob) > 0 && empty {
     274                n = 0
     275        }
     276        return n, nil
    228277}
    229278
Note: See TracChangeset for help on using the changeset viewer.