// fields used only by net package
buf syscall.WSABuf
- rsa *syscall.RawSockaddrAny
bufs []syscall.WSABuf
}
wsaMsgPool.Put(msg)
}
+var wsaRsaPool = sync.Pool{
+ New: func() any {
+ return new(syscall.RawSockaddrAny)
+ },
+}
+
// waitIO waits for the IO operation o to complete.
func (fd *FD) waitIO(o *operation) error {
if fd.isBlocking {
defer fd.readUnlock()
o := &fd.rop
o.InitBuf(buf)
+ rsa := wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
- if o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
- }
- rsan := int32(unsafe.Sizeof(*o.rsa))
+ rsan := int32(unsafe.Sizeof(*rsa))
var flags uint32
- err = syscall.WSARecvFrom(fd.Sysfd, &o.buf, 1, &qty, &flags, o.rsa, &rsan, &o.o, nil)
+ err = syscall.WSARecvFrom(fd.Sysfd, &o.buf, 1, &qty, &flags, rsa, &rsan, &o.o, nil)
return qty, err
})
err = fd.eofError(n, err)
if err != nil {
return n, nil, err
}
- sa, _ := o.rsa.Sockaddr()
+ sa, _ := rsa.Sockaddr()
return n, sa, nil
}
defer fd.readUnlock()
o := &fd.rop
o.InitBuf(buf)
+ rsa := wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
- if o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
- }
- rsan := int32(unsafe.Sizeof(*o.rsa))
+ rsan := int32(unsafe.Sizeof(*rsa))
var flags uint32
- err = syscall.WSARecvFrom(fd.Sysfd, &o.buf, 1, &qty, &flags, o.rsa, &rsan, &o.o, nil)
+ err = syscall.WSARecvFrom(fd.Sysfd, &o.buf, 1, &qty, &flags, rsa, &rsan, &o.o, nil)
return qty, err
})
err = fd.eofError(n, err)
if err != nil {
return n, err
}
- rawToSockaddrInet4(o.rsa, sa4)
+ rawToSockaddrInet4(rsa, sa4)
return n, err
}
defer fd.readUnlock()
o := &fd.rop
o.InitBuf(buf)
+ rsa := wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
- if o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
- }
- rsan := int32(unsafe.Sizeof(*o.rsa))
+ rsan := int32(unsafe.Sizeof(*rsa))
var flags uint32
- err = syscall.WSARecvFrom(fd.Sysfd, &o.buf, 1, &qty, &flags, o.rsa, &rsan, &o.o, nil)
+ err = syscall.WSARecvFrom(fd.Sysfd, &o.buf, 1, &qty, &flags, rsa, &rsan, &o.o, nil)
return qty, err
})
err = fd.eofError(n, err)
if err != nil {
return n, err
}
- rawToSockaddrInet6(o.rsa, sa6)
+ rawToSockaddrInet6(rsa, sa6)
return n, err
}
p = p[:maxRW]
}
- o := &fd.rop
- if o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
- }
- msg := newWSAMsg(p, oob, flags, o.rsa)
+ rsa := wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
+ msg := newWSAMsg(p, oob, flags, rsa)
defer freeWSAMsg(msg)
- n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
+ n, err := fd.execIO(&fd.rop, func(o *operation) (qty uint32, err error) {
err = windows.WSARecvMsg(fd.Sysfd, msg, &qty, &o.o, nil)
return qty, err
})
err = fd.eofError(n, err)
var sa syscall.Sockaddr
if err == nil {
- sa, err = o.rsa.Sockaddr()
+ sa, err = rsa.Sockaddr()
}
return n, int(msg.Control.Len), int(msg.Flags), sa, err
}
p = p[:maxRW]
}
- o := &fd.rop
- if o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
- }
- msg := newWSAMsg(p, oob, flags, o.rsa)
+ rsa := wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
+ msg := newWSAMsg(p, oob, flags, rsa)
defer freeWSAMsg(msg)
- n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
+ n, err := fd.execIO(&fd.rop, func(o *operation) (qty uint32, err error) {
err = windows.WSARecvMsg(fd.Sysfd, msg, &qty, &o.o, nil)
return qty, err
})
err = fd.eofError(n, err)
if err == nil {
- rawToSockaddrInet4(o.rsa, sa4)
+ rawToSockaddrInet4(rsa, sa4)
}
return n, int(msg.Control.Len), int(msg.Flags), err
}
p = p[:maxRW]
}
- o := &fd.rop
- if o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
- }
- msg := newWSAMsg(p, oob, flags, o.rsa)
+ rsa := wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
+ msg := newWSAMsg(p, oob, flags, rsa)
defer freeWSAMsg(msg)
- n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
+ n, err := fd.execIO(&fd.rop, func(o *operation) (qty uint32, err error) {
err = windows.WSARecvMsg(fd.Sysfd, msg, &qty, &o.o, nil)
return qty, err
})
err = fd.eofError(n, err)
if err == nil {
- rawToSockaddrInet6(o.rsa, sa6)
+ rawToSockaddrInet6(rsa, sa6)
}
return n, int(msg.Control.Len), int(msg.Flags), err
}
}
defer fd.writeUnlock()
- o := &fd.wop
- if sa != nil && o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
+ var rsa *syscall.RawSockaddrAny
+ if sa != nil {
+ rsa = wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
}
- msg := newWSAMsg(p, oob, 0, o.rsa)
+ msg := newWSAMsg(p, oob, 0, rsa)
defer freeWSAMsg(msg)
if sa != nil {
var err error
- msg.Namelen, err = sockaddrToRaw(o.rsa, sa)
+ msg.Namelen, err = sockaddrToRaw(rsa, sa)
if err != nil {
return 0, 0, err
}
}
- n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
+ n, err := fd.execIO(&fd.wop, func(o *operation) (qty uint32, err error) {
err = windows.WSASendMsg(fd.Sysfd, msg, 0, nil, &o.o, nil)
return qty, err
})
}
defer fd.writeUnlock()
- o := &fd.wop
- if sa != nil && o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
+ var rsa *syscall.RawSockaddrAny
+ if sa != nil {
+ rsa = wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
}
- msg := newWSAMsg(p, oob, 0, o.rsa)
+ msg := newWSAMsg(p, oob, 0, rsa)
defer freeWSAMsg(msg)
if sa != nil {
- msg.Namelen = sockaddrInet4ToRaw(o.rsa, sa)
+ msg.Namelen = sockaddrInet4ToRaw(rsa, sa)
}
- n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
+ n, err := fd.execIO(&fd.wop, func(o *operation) (qty uint32, err error) {
err = windows.WSASendMsg(fd.Sysfd, msg, 0, nil, &o.o, nil)
return qty, err
})
}
defer fd.writeUnlock()
- o := &fd.wop
- if sa != nil && o.rsa == nil {
- o.rsa = new(syscall.RawSockaddrAny)
+ var rsa *syscall.RawSockaddrAny
+ if sa != nil {
+ rsa = wsaRsaPool.Get().(*syscall.RawSockaddrAny)
+ defer wsaRsaPool.Put(rsa)
}
- msg := newWSAMsg(p, oob, 0, o.rsa)
+ msg := newWSAMsg(p, oob, 0, rsa)
defer freeWSAMsg(msg)
if sa != nil {
- msg.Namelen = sockaddrInet6ToRaw(o.rsa, sa)
+ msg.Namelen = sockaddrInet6ToRaw(rsa, sa)
}
- n, err := fd.execIO(o, func(o *operation) (qty uint32, err error) {
+ n, err := fd.execIO(&fd.wop, func(o *operation) (qty uint32, err error) {
err = windows.WSASendMsg(fd.Sysfd, msg, 0, nil, &o.o, nil)
return qty, err
})