Replace uinptr with int64 when returning lengths
This is in accordance with newer parts of the standard library. PiperOrigin-RevId: 263449916
This commit is contained in:
parent
69d1414a32
commit
d81d94ac4c
|
@ -65,7 +65,7 @@ type ConnectedEndpoint struct {
|
|||
// GetSockOpt and message splitting/rejection in SendMsg, but do not
|
||||
// prevent lots of small messages from filling the real send buffer
|
||||
// size on the host.
|
||||
sndbuf int `state:"nosave"`
|
||||
sndbuf int64 `state:"nosave"`
|
||||
|
||||
// mu protects the fields below.
|
||||
mu sync.RWMutex `state:"nosave"`
|
||||
|
@ -107,7 +107,7 @@ func (c *ConnectedEndpoint) init() *syserr.Error {
|
|||
}
|
||||
|
||||
c.stype = linux.SockType(stype)
|
||||
c.sndbuf = sndbuf
|
||||
c.sndbuf = int64(sndbuf)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -202,7 +202,7 @@ func newSocket(ctx context.Context, orgfd int, saveable bool) (*fs.File, error)
|
|||
}
|
||||
|
||||
// Send implements transport.ConnectedEndpoint.Send.
|
||||
func (c *ConnectedEndpoint) Send(data [][]byte, controlMessages transport.ControlMessages, from tcpip.FullAddress) (uintptr, bool, *syserr.Error) {
|
||||
func (c *ConnectedEndpoint) Send(data [][]byte, controlMessages transport.ControlMessages, from tcpip.FullAddress) (int64, bool, *syserr.Error) {
|
||||
c.mu.RLock()
|
||||
defer c.mu.RUnlock()
|
||||
|
||||
|
@ -279,7 +279,7 @@ func (c *ConnectedEndpoint) EventUpdate() {
|
|||
}
|
||||
|
||||
// Recv implements transport.Receiver.Recv.
|
||||
func (c *ConnectedEndpoint) Recv(data [][]byte, creds bool, numRights uintptr, peek bool) (uintptr, uintptr, transport.ControlMessages, bool, tcpip.FullAddress, bool, *syserr.Error) {
|
||||
func (c *ConnectedEndpoint) Recv(data [][]byte, creds bool, numRights int, peek bool) (int64, int64, transport.ControlMessages, bool, tcpip.FullAddress, bool, *syserr.Error) {
|
||||
c.mu.RLock()
|
||||
defer c.mu.RUnlock()
|
||||
|
||||
|
|
|
@ -55,19 +55,19 @@ func copyFromMulti(dst []byte, src [][]byte) {
|
|||
//
|
||||
// If intermediate != nil, iovecs references intermediate rather than bufs and
|
||||
// the caller must copy to/from bufs as necessary.
|
||||
func buildIovec(bufs [][]byte, maxlen int, truncate bool) (length uintptr, iovecs []syscall.Iovec, intermediate []byte, err error) {
|
||||
func buildIovec(bufs [][]byte, maxlen int64, truncate bool) (length int64, iovecs []syscall.Iovec, intermediate []byte, err error) {
|
||||
var iovsRequired int
|
||||
for _, b := range bufs {
|
||||
length += uintptr(len(b))
|
||||
length += int64(len(b))
|
||||
if len(b) > 0 {
|
||||
iovsRequired++
|
||||
}
|
||||
}
|
||||
|
||||
stopLen := length
|
||||
if length > uintptr(maxlen) {
|
||||
if length > maxlen {
|
||||
if truncate {
|
||||
stopLen = uintptr(maxlen)
|
||||
stopLen = maxlen
|
||||
err = syserror.EAGAIN
|
||||
} else {
|
||||
return 0, nil, nil, syserror.EMSGSIZE
|
||||
|
@ -85,7 +85,7 @@ func buildIovec(bufs [][]byte, maxlen int, truncate bool) (length uintptr, iovec
|
|||
}}, b, err
|
||||
}
|
||||
|
||||
var total uintptr
|
||||
var total int64
|
||||
iovecs = make([]syscall.Iovec, 0, iovsRequired)
|
||||
for i := range bufs {
|
||||
l := len(bufs[i])
|
||||
|
@ -93,9 +93,9 @@ func buildIovec(bufs [][]byte, maxlen int, truncate bool) (length uintptr, iovec
|
|||
continue
|
||||
}
|
||||
|
||||
stop := l
|
||||
if total+uintptr(stop) > stopLen {
|
||||
stop = int(stopLen - total)
|
||||
stop := int64(l)
|
||||
if total+stop > stopLen {
|
||||
stop = stopLen - total
|
||||
}
|
||||
|
||||
iovecs = append(iovecs, syscall.Iovec{
|
||||
|
@ -103,7 +103,7 @@ func buildIovec(bufs [][]byte, maxlen int, truncate bool) (length uintptr, iovec
|
|||
Len: uint64(stop),
|
||||
})
|
||||
|
||||
total += uintptr(stop)
|
||||
total += stop
|
||||
if total >= stopLen {
|
||||
break
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ import (
|
|||
//
|
||||
// If the total length of bufs is > maxlen, fdReadVec will do a partial read
|
||||
// and err will indicate why the message was truncated.
|
||||
func fdReadVec(fd int, bufs [][]byte, control []byte, peek bool, maxlen int) (readLen uintptr, msgLen uintptr, controlLen uint64, controlTrunc bool, err error) {
|
||||
func fdReadVec(fd int, bufs [][]byte, control []byte, peek bool, maxlen int64) (readLen int64, msgLen int64, controlLen uint64, controlTrunc bool, err error) {
|
||||
flags := uintptr(syscall.MSG_DONTWAIT | syscall.MSG_TRUNC)
|
||||
if peek {
|
||||
flags |= syscall.MSG_PEEK
|
||||
|
@ -48,11 +48,12 @@ func fdReadVec(fd int, bufs [][]byte, control []byte, peek bool, maxlen int) (re
|
|||
msg.Iovlen = uint64(len(iovecs))
|
||||
}
|
||||
|
||||
n, _, e := syscall.RawSyscall(syscall.SYS_RECVMSG, uintptr(fd), uintptr(unsafe.Pointer(&msg)), flags)
|
||||
rawN, _, e := syscall.RawSyscall(syscall.SYS_RECVMSG, uintptr(fd), uintptr(unsafe.Pointer(&msg)), flags)
|
||||
if e != 0 {
|
||||
// N.B. prioritize the syscall error over the buildIovec error.
|
||||
return 0, 0, 0, false, e
|
||||
}
|
||||
n := int64(rawN)
|
||||
|
||||
// Copy data back to bufs.
|
||||
if intermediate != nil {
|
||||
|
@ -72,7 +73,7 @@ func fdReadVec(fd int, bufs [][]byte, control []byte, peek bool, maxlen int) (re
|
|||
//
|
||||
// If the total length of bufs is > maxlen && truncate, fdWriteVec will do a
|
||||
// partial write and err will indicate why the message was truncated.
|
||||
func fdWriteVec(fd int, bufs [][]byte, maxlen int, truncate bool) (uintptr, uintptr, error) {
|
||||
func fdWriteVec(fd int, bufs [][]byte, maxlen int64, truncate bool) (int64, int64, error) {
|
||||
length, iovecs, intermediate, err := buildIovec(bufs, maxlen, truncate)
|
||||
if err != nil && len(iovecs) == 0 {
|
||||
// No partial write to do, return error immediately.
|
||||
|
@ -96,5 +97,5 @@ func fdWriteVec(fd int, bufs [][]byte, maxlen int, truncate bool) (uintptr, uint
|
|||
return 0, length, e
|
||||
}
|
||||
|
||||
return n, length, err
|
||||
return int64(n), length, err
|
||||
}
|
||||
|
|
|
@ -2046,7 +2046,7 @@ func (s *SocketOperations) SendMsg(t *kernel.Task, src usermem.IOSequence, to []
|
|||
n, _, err = s.Endpoint.Write(v, opts)
|
||||
}
|
||||
dontWait := flags&linux.MSG_DONTWAIT != 0
|
||||
if err == nil && (n >= uintptr(v.Size()) || dontWait) {
|
||||
if err == nil && (n >= int64(v.Size()) || dontWait) {
|
||||
// Complete write.
|
||||
return int(n), nil
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ type EndpointReader struct {
|
|||
Creds bool
|
||||
|
||||
// NumRights is the number of SCM_RIGHTS FDs requested.
|
||||
NumRights uintptr
|
||||
NumRights int
|
||||
|
||||
// Peek indicates that the data should not be consumed from the
|
||||
// endpoint.
|
||||
|
@ -70,7 +70,7 @@ type EndpointReader struct {
|
|||
|
||||
// MsgSize is the size of the message that was read from. For stream
|
||||
// sockets, it is the amount read.
|
||||
MsgSize uintptr
|
||||
MsgSize int64
|
||||
|
||||
// From, if not nil, will be set with the address read from.
|
||||
From *tcpip.FullAddress
|
||||
|
|
|
@ -436,7 +436,7 @@ func (e *connectionedEndpoint) Bind(addr tcpip.FullAddress, commit func() *syser
|
|||
|
||||
// SendMsg writes data and a control message to the endpoint's peer.
|
||||
// This method does not block if the data cannot be written.
|
||||
func (e *connectionedEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMessages, to BoundEndpoint) (uintptr, *syserr.Error) {
|
||||
func (e *connectionedEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMessages, to BoundEndpoint) (int64, *syserr.Error) {
|
||||
// Stream sockets do not support specifying the endpoint. Seqpacket
|
||||
// sockets ignore the passed endpoint.
|
||||
if e.stype == linux.SOCK_STREAM && to != nil {
|
||||
|
|
|
@ -99,7 +99,7 @@ func (e *connectionlessEndpoint) UnidirectionalConnect(ctx context.Context) (Con
|
|||
|
||||
// SendMsg writes data and a control message to the specified endpoint.
|
||||
// This method does not block if the data cannot be written.
|
||||
func (e *connectionlessEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMessages, to BoundEndpoint) (uintptr, *syserr.Error) {
|
||||
func (e *connectionlessEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMessages, to BoundEndpoint) (int64, *syserr.Error) {
|
||||
if to == nil {
|
||||
return e.baseEndpoint.SendMsg(ctx, data, c, nil)
|
||||
}
|
||||
|
|
|
@ -121,13 +121,13 @@ type Endpoint interface {
|
|||
// CMTruncated indicates that the numRights hint was used to receive fewer
|
||||
// than the total available SCM_RIGHTS FDs. Additional truncation may be
|
||||
// required by the caller.
|
||||
RecvMsg(ctx context.Context, data [][]byte, creds bool, numRights uintptr, peek bool, addr *tcpip.FullAddress) (recvLen, msgLen uintptr, cm ControlMessages, CMTruncated bool, err *syserr.Error)
|
||||
RecvMsg(ctx context.Context, data [][]byte, creds bool, numRights int, peek bool, addr *tcpip.FullAddress) (recvLen, msgLen int64, cm ControlMessages, CMTruncated bool, err *syserr.Error)
|
||||
|
||||
// SendMsg writes data and a control message to the endpoint's peer.
|
||||
// This method does not block if the data cannot be written.
|
||||
//
|
||||
// SendMsg does not take ownership of any of its arguments on error.
|
||||
SendMsg(context.Context, [][]byte, ControlMessages, BoundEndpoint) (uintptr, *syserr.Error)
|
||||
SendMsg(context.Context, [][]byte, ControlMessages, BoundEndpoint) (int64, *syserr.Error)
|
||||
|
||||
// Connect connects this endpoint directly to another.
|
||||
//
|
||||
|
@ -291,7 +291,7 @@ type Receiver interface {
|
|||
// See Endpoint.RecvMsg for documentation on shared arguments.
|
||||
//
|
||||
// notify indicates if RecvNotify should be called.
|
||||
Recv(data [][]byte, creds bool, numRights uintptr, peek bool) (recvLen, msgLen uintptr, cm ControlMessages, CMTruncated bool, source tcpip.FullAddress, notify bool, err *syserr.Error)
|
||||
Recv(data [][]byte, creds bool, numRights int, peek bool) (recvLen, msgLen int64, cm ControlMessages, CMTruncated bool, source tcpip.FullAddress, notify bool, err *syserr.Error)
|
||||
|
||||
// RecvNotify notifies the Receiver of a successful Recv. This must not be
|
||||
// called while holding any endpoint locks.
|
||||
|
@ -331,7 +331,7 @@ type queueReceiver struct {
|
|||
}
|
||||
|
||||
// Recv implements Receiver.Recv.
|
||||
func (q *queueReceiver) Recv(data [][]byte, creds bool, numRights uintptr, peek bool) (uintptr, uintptr, ControlMessages, bool, tcpip.FullAddress, bool, *syserr.Error) {
|
||||
func (q *queueReceiver) Recv(data [][]byte, creds bool, numRights int, peek bool) (int64, int64, ControlMessages, bool, tcpip.FullAddress, bool, *syserr.Error) {
|
||||
var m *message
|
||||
var notify bool
|
||||
var err *syserr.Error
|
||||
|
@ -344,13 +344,13 @@ func (q *queueReceiver) Recv(data [][]byte, creds bool, numRights uintptr, peek
|
|||
return 0, 0, ControlMessages{}, false, tcpip.FullAddress{}, false, err
|
||||
}
|
||||
src := []byte(m.Data)
|
||||
var copied uintptr
|
||||
var copied int64
|
||||
for i := 0; i < len(data) && len(src) > 0; i++ {
|
||||
n := copy(data[i], src)
|
||||
copied += uintptr(n)
|
||||
copied += int64(n)
|
||||
src = src[n:]
|
||||
}
|
||||
return copied, uintptr(len(m.Data)), m.Control, false, m.Address, notify, nil
|
||||
return copied, int64(len(m.Data)), m.Control, false, m.Address, notify, nil
|
||||
}
|
||||
|
||||
// RecvNotify implements Receiver.RecvNotify.
|
||||
|
@ -401,11 +401,11 @@ type streamQueueReceiver struct {
|
|||
addr tcpip.FullAddress
|
||||
}
|
||||
|
||||
func vecCopy(data [][]byte, buf []byte) (uintptr, [][]byte, []byte) {
|
||||
var copied uintptr
|
||||
func vecCopy(data [][]byte, buf []byte) (int64, [][]byte, []byte) {
|
||||
var copied int64
|
||||
for len(data) > 0 && len(buf) > 0 {
|
||||
n := copy(data[0], buf)
|
||||
copied += uintptr(n)
|
||||
copied += int64(n)
|
||||
buf = buf[n:]
|
||||
data[0] = data[0][n:]
|
||||
if len(data[0]) == 0 {
|
||||
|
@ -443,7 +443,7 @@ func (q *streamQueueReceiver) RecvMaxQueueSize() int64 {
|
|||
}
|
||||
|
||||
// Recv implements Receiver.Recv.
|
||||
func (q *streamQueueReceiver) Recv(data [][]byte, wantCreds bool, numRights uintptr, peek bool) (uintptr, uintptr, ControlMessages, bool, tcpip.FullAddress, bool, *syserr.Error) {
|
||||
func (q *streamQueueReceiver) Recv(data [][]byte, wantCreds bool, numRights int, peek bool) (int64, int64, ControlMessages, bool, tcpip.FullAddress, bool, *syserr.Error) {
|
||||
q.mu.Lock()
|
||||
defer q.mu.Unlock()
|
||||
|
||||
|
@ -464,7 +464,7 @@ func (q *streamQueueReceiver) Recv(data [][]byte, wantCreds bool, numRights uint
|
|||
q.addr = m.Address
|
||||
}
|
||||
|
||||
var copied uintptr
|
||||
var copied int64
|
||||
if peek {
|
||||
// Don't consume control message if we are peeking.
|
||||
c := q.control.Clone()
|
||||
|
@ -531,7 +531,7 @@ func (q *streamQueueReceiver) Recv(data [][]byte, wantCreds bool, numRights uint
|
|||
break
|
||||
}
|
||||
|
||||
var cpd uintptr
|
||||
var cpd int64
|
||||
cpd, data, q.buffer = vecCopy(data, q.buffer)
|
||||
copied += cpd
|
||||
|
||||
|
@ -569,7 +569,7 @@ type ConnectedEndpoint interface {
|
|||
//
|
||||
// syserr.ErrWouldBlock can be returned along with a partial write if
|
||||
// the caller should block to send the rest of the data.
|
||||
Send(data [][]byte, controlMessages ControlMessages, from tcpip.FullAddress) (n uintptr, notify bool, err *syserr.Error)
|
||||
Send(data [][]byte, controlMessages ControlMessages, from tcpip.FullAddress) (n int64, notify bool, err *syserr.Error)
|
||||
|
||||
// SendNotify notifies the ConnectedEndpoint of a successful Send. This
|
||||
// must not be called while holding any endpoint locks.
|
||||
|
@ -637,7 +637,7 @@ func (e *connectedEndpoint) GetLocalAddress() (tcpip.FullAddress, *tcpip.Error)
|
|||
}
|
||||
|
||||
// Send implements ConnectedEndpoint.Send.
|
||||
func (e *connectedEndpoint) Send(data [][]byte, controlMessages ControlMessages, from tcpip.FullAddress) (uintptr, bool, *syserr.Error) {
|
||||
func (e *connectedEndpoint) Send(data [][]byte, controlMessages ControlMessages, from tcpip.FullAddress) (int64, bool, *syserr.Error) {
|
||||
var l int64
|
||||
for _, d := range data {
|
||||
l += int64(len(d))
|
||||
|
@ -665,7 +665,7 @@ func (e *connectedEndpoint) Send(data [][]byte, controlMessages ControlMessages,
|
|||
}
|
||||
|
||||
l, notify, err := e.writeQueue.Enqueue(&message{Data: buffer.View(v), Control: controlMessages, Address: from}, truncate)
|
||||
return uintptr(l), notify, err
|
||||
return int64(l), notify, err
|
||||
}
|
||||
|
||||
// SendNotify implements ConnectedEndpoint.SendNotify.
|
||||
|
@ -781,7 +781,7 @@ func (e *baseEndpoint) Connected() bool {
|
|||
}
|
||||
|
||||
// RecvMsg reads data and a control message from the endpoint.
|
||||
func (e *baseEndpoint) RecvMsg(ctx context.Context, data [][]byte, creds bool, numRights uintptr, peek bool, addr *tcpip.FullAddress) (uintptr, uintptr, ControlMessages, bool, *syserr.Error) {
|
||||
func (e *baseEndpoint) RecvMsg(ctx context.Context, data [][]byte, creds bool, numRights int, peek bool, addr *tcpip.FullAddress) (int64, int64, ControlMessages, bool, *syserr.Error) {
|
||||
e.Lock()
|
||||
|
||||
if e.receiver == nil {
|
||||
|
@ -807,7 +807,7 @@ func (e *baseEndpoint) RecvMsg(ctx context.Context, data [][]byte, creds bool, n
|
|||
|
||||
// SendMsg writes data and a control message to the endpoint's peer.
|
||||
// This method does not block if the data cannot be written.
|
||||
func (e *baseEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMessages, to BoundEndpoint) (uintptr, *syserr.Error) {
|
||||
func (e *baseEndpoint) SendMsg(ctx context.Context, data [][]byte, c ControlMessages, to BoundEndpoint) (int64, *syserr.Error) {
|
||||
e.Lock()
|
||||
if !e.Connected() {
|
||||
e.Unlock()
|
||||
|
|
|
@ -535,7 +535,7 @@ func (s *SocketOperations) RecvMsg(t *kernel.Task, dst usermem.IOSequence, flags
|
|||
Ctx: t,
|
||||
Endpoint: s.ep,
|
||||
Creds: wantCreds,
|
||||
NumRights: uintptr(numRights),
|
||||
NumRights: numRights,
|
||||
Peek: peek,
|
||||
}
|
||||
if senderRequested {
|
||||
|
|
|
@ -404,7 +404,7 @@ func (c *Conn) Write(b []byte) (int, error) {
|
|||
}
|
||||
}
|
||||
|
||||
var n uintptr
|
||||
var n int64
|
||||
var resCh <-chan struct{}
|
||||
n, resCh, err = c.ep.Write(tcpip.SlicePayload(v), tcpip.WriteOptions{})
|
||||
nbytes += int(n)
|
||||
|
|
|
@ -65,7 +65,7 @@ func (*fakeTransportEndpoint) Read(*tcpip.FullAddress) (buffer.View, tcpip.Contr
|
|||
return buffer.View{}, tcpip.ControlMessages{}, nil
|
||||
}
|
||||
|
||||
func (f *fakeTransportEndpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-chan struct{}, *tcpip.Error) {
|
||||
func (f *fakeTransportEndpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (int64, <-chan struct{}, *tcpip.Error) {
|
||||
if len(f.route.RemoteAddress) == 0 {
|
||||
return 0, nil, tcpip.ErrNoRoute
|
||||
}
|
||||
|
@ -79,10 +79,10 @@ func (f *fakeTransportEndpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions)
|
|||
return 0, nil, err
|
||||
}
|
||||
|
||||
return uintptr(len(v)), nil, nil
|
||||
return int64(len(v)), nil, nil
|
||||
}
|
||||
|
||||
func (f *fakeTransportEndpoint) Peek([][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Error) {
|
||||
func (f *fakeTransportEndpoint) Peek([][]byte) (int64, tcpip.ControlMessages, *tcpip.Error) {
|
||||
return 0, tcpip.ControlMessages{}, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -329,12 +329,12 @@ type Endpoint interface {
|
|||
// ErrNoLinkAddress and a notification channel is returned for the caller to
|
||||
// block. Channel is closed once address resolution is complete (success or
|
||||
// not). The channel is only non-nil in this case.
|
||||
Write(Payload, WriteOptions) (uintptr, <-chan struct{}, *Error)
|
||||
Write(Payload, WriteOptions) (int64, <-chan struct{}, *Error)
|
||||
|
||||
// Peek reads data without consuming it from the endpoint.
|
||||
//
|
||||
// This method does not block if there is no data pending.
|
||||
Peek([][]byte) (uintptr, ControlMessages, *Error)
|
||||
Peek([][]byte) (int64, ControlMessages, *Error)
|
||||
|
||||
// Connect connects the endpoint to its peer. Specifying a NIC is
|
||||
// optional.
|
||||
|
|
|
@ -233,7 +233,7 @@ func (e *endpoint) prepareForWrite(to *tcpip.FullAddress) (retry bool, err *tcpi
|
|||
|
||||
// Write writes data to the endpoint's peer. This method does not block
|
||||
// if the data cannot be written.
|
||||
func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-chan struct{}, *tcpip.Error) {
|
||||
func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (int64, <-chan struct{}, *tcpip.Error) {
|
||||
// MSG_MORE is unimplemented. (This also means that MSG_EOR is a no-op.)
|
||||
if opts.More {
|
||||
return 0, nil, tcpip.ErrInvalidOptionValue
|
||||
|
@ -335,11 +335,11 @@ func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-c
|
|||
return 0, nil, err
|
||||
}
|
||||
|
||||
return uintptr(len(v)), nil, nil
|
||||
return int64(len(v)), nil, nil
|
||||
}
|
||||
|
||||
// Peek only returns data from a single datagram, so do nothing here.
|
||||
func (e *endpoint) Peek([][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Error) {
|
||||
func (e *endpoint) Peek([][]byte) (int64, tcpip.ControlMessages, *tcpip.Error) {
|
||||
return 0, tcpip.ControlMessages{}, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -232,7 +232,7 @@ func (ep *endpoint) Read(addr *tcpip.FullAddress) (buffer.View, tcpip.ControlMes
|
|||
}
|
||||
|
||||
// Write implements tcpip.Endpoint.Write.
|
||||
func (ep *endpoint) Write(payload tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-chan struct{}, *tcpip.Error) {
|
||||
func (ep *endpoint) Write(payload tcpip.Payload, opts tcpip.WriteOptions) (int64, <-chan struct{}, *tcpip.Error) {
|
||||
// MSG_MORE is unimplemented. This also means that MSG_EOR is a no-op.
|
||||
if opts.More {
|
||||
return 0, nil, tcpip.ErrInvalidOptionValue
|
||||
|
@ -336,7 +336,7 @@ func (ep *endpoint) Write(payload tcpip.Payload, opts tcpip.WriteOptions) (uintp
|
|||
|
||||
// finishWrite writes the payload to a route. It resolves the route if
|
||||
// necessary. It's really just a helper to make defer unnecessary in Write.
|
||||
func (ep *endpoint) finishWrite(payloadBytes []byte, route *stack.Route) (uintptr, <-chan struct{}, *tcpip.Error) {
|
||||
func (ep *endpoint) finishWrite(payloadBytes []byte, route *stack.Route) (int64, <-chan struct{}, *tcpip.Error) {
|
||||
// We may need to resolve the route (match a link layer address to the
|
||||
// network address). If that requires blocking (e.g. to use ARP),
|
||||
// return a channel on which the caller can wait.
|
||||
|
@ -366,11 +366,11 @@ func (ep *endpoint) finishWrite(payloadBytes []byte, route *stack.Route) (uintpt
|
|||
return 0, nil, tcpip.ErrUnknownProtocol
|
||||
}
|
||||
|
||||
return uintptr(len(payloadBytes)), nil, nil
|
||||
return int64(len(payloadBytes)), nil, nil
|
||||
}
|
||||
|
||||
// Peek implements tcpip.Endpoint.Peek.
|
||||
func (ep *endpoint) Peek([][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Error) {
|
||||
func (ep *endpoint) Peek([][]byte) (int64, tcpip.ControlMessages, *tcpip.Error) {
|
||||
return 0, tcpip.ControlMessages{}, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -907,7 +907,7 @@ func (e *endpoint) isEndpointWritableLocked() (int, *tcpip.Error) {
|
|||
}
|
||||
|
||||
// Write writes data to the endpoint's peer.
|
||||
func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-chan struct{}, *tcpip.Error) {
|
||||
func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (int64, <-chan struct{}, *tcpip.Error) {
|
||||
// Linux completely ignores any address passed to sendto(2) for TCP sockets
|
||||
// (without the MSG_FASTOPEN flag). Corking is unimplemented, so opts.More
|
||||
// and opts.EndOfRecord are also ignored.
|
||||
|
@ -976,13 +976,13 @@ func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-c
|
|||
// Let the protocol goroutine do the work.
|
||||
e.sndWaker.Assert()
|
||||
}
|
||||
return uintptr(l), nil, nil
|
||||
return int64(l), nil, nil
|
||||
}
|
||||
|
||||
// Peek reads data without consuming it from the endpoint.
|
||||
//
|
||||
// This method does not block if there is no data pending.
|
||||
func (e *endpoint) Peek(vec [][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Error) {
|
||||
func (e *endpoint) Peek(vec [][]byte) (int64, tcpip.ControlMessages, *tcpip.Error) {
|
||||
e.mu.RLock()
|
||||
defer e.mu.RUnlock()
|
||||
|
||||
|
@ -1008,8 +1008,7 @@ func (e *endpoint) Peek(vec [][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Er
|
|||
// Make a copy of vec so we can modify the slide headers.
|
||||
vec = append([][]byte(nil), vec...)
|
||||
|
||||
var num uintptr
|
||||
|
||||
var num int64
|
||||
for s := e.rcvList.Front(); s != nil; s = s.Next() {
|
||||
views := s.data.Views()
|
||||
|
||||
|
@ -1028,7 +1027,7 @@ func (e *endpoint) Peek(vec [][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Er
|
|||
n := copy(vec[0], v)
|
||||
v = v[n:]
|
||||
vec[0] = vec[0][n:]
|
||||
num += uintptr(n)
|
||||
num += int64(n)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -315,7 +315,7 @@ func (e *endpoint) connectRoute(nicid tcpip.NICID, addr tcpip.FullAddress, netPr
|
|||
|
||||
// Write writes data to the endpoint's peer. This method does not block
|
||||
// if the data cannot be written.
|
||||
func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-chan struct{}, *tcpip.Error) {
|
||||
func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (int64, <-chan struct{}, *tcpip.Error) {
|
||||
// MSG_MORE is unimplemented. (This also means that MSG_EOR is a no-op.)
|
||||
if opts.More {
|
||||
return 0, nil, tcpip.ErrInvalidOptionValue
|
||||
|
@ -421,11 +421,11 @@ func (e *endpoint) Write(p tcpip.Payload, opts tcpip.WriteOptions) (uintptr, <-c
|
|||
if err := sendUDP(route, buffer.View(v).ToVectorisedView(), e.id.LocalPort, dstPort, ttl); err != nil {
|
||||
return 0, nil, err
|
||||
}
|
||||
return uintptr(len(v)), nil, nil
|
||||
return int64(len(v)), nil, nil
|
||||
}
|
||||
|
||||
// Peek only returns data from a single datagram, so do nothing here.
|
||||
func (e *endpoint) Peek([][]byte) (uintptr, tcpip.ControlMessages, *tcpip.Error) {
|
||||
func (e *endpoint) Peek([][]byte) (int64, tcpip.ControlMessages, *tcpip.Error) {
|
||||
return 0, tcpip.ControlMessages{}, nil
|
||||
}
|
||||
|
||||
|
|
|
@ -567,7 +567,7 @@ func testV4Write(c *testContext) uint16 {
|
|||
if err != nil {
|
||||
c.t.Fatalf("Write failed: %v", err)
|
||||
}
|
||||
if n != uintptr(len(payload)) {
|
||||
if n != int64(len(payload)) {
|
||||
c.t.Fatalf("Bad number of bytes written: got %v, want %v", n, len(payload))
|
||||
}
|
||||
|
||||
|
@ -597,7 +597,7 @@ func testV6Write(c *testContext) uint16 {
|
|||
if err != nil {
|
||||
c.t.Fatalf("Write failed: %v", err)
|
||||
}
|
||||
if n != uintptr(len(payload)) {
|
||||
if n != int64(len(payload)) {
|
||||
c.t.Fatalf("Bad number of bytes written: got %v, want %v", n, len(payload))
|
||||
}
|
||||
|
||||
|
@ -754,7 +754,7 @@ func TestV6WriteOnConnected(t *testing.T) {
|
|||
if err != nil {
|
||||
c.t.Fatalf("Write failed: %v", err)
|
||||
}
|
||||
if n != uintptr(len(payload)) {
|
||||
if n != int64(len(payload)) {
|
||||
c.t.Fatalf("Bad number of bytes written: got %v, want %v", n, len(payload))
|
||||
}
|
||||
|
||||
|
@ -790,7 +790,7 @@ func TestV4WriteOnConnected(t *testing.T) {
|
|||
if err != nil {
|
||||
c.t.Fatalf("Write failed: %v", err)
|
||||
}
|
||||
if n != uintptr(len(payload)) {
|
||||
if n != int64(len(payload)) {
|
||||
c.t.Fatalf("Bad number of bytes written: got %v, want %v", n, len(payload))
|
||||
}
|
||||
|
||||
|
@ -948,7 +948,7 @@ func TestTTL(t *testing.T) {
|
|||
if err != nil {
|
||||
c.t.Fatalf("Write failed: %v", err)
|
||||
}
|
||||
if n != uintptr(len(payload)) {
|
||||
if n != int64(len(payload)) {
|
||||
c.t.Fatalf("got c.ep.Write(...) = %d, want = %d", n, len(payload))
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue