Commit 3a971195 authored by Albert Strasheim's avatar Albert Strasheim Committed by Russ Cox

net, syscall: return source address in Recvmsg

R=rsc
CC=golang-dev
https://golang.org/cl/3766042
parent 655da996
...@@ -417,7 +417,7 @@ func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S ...@@ -417,7 +417,7 @@ func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S
var oserr os.Error var oserr os.Error
for { for {
var errno int var errno int
n, oobn, flags, errno = syscall.Recvmsg(fd.sysfd, p, oob, sa, 0) n, oobn, flags, sa, errno = syscall.Recvmsg(fd.sysfd, p, oob, 0)
if errno == syscall.EAGAIN && fd.rdeadline >= 0 { if errno == syscall.EAGAIN && fd.rdeadline >= 0 {
pollserver.WaitRead(fd) pollserver.WaitRead(fd)
continue continue
......
...@@ -485,8 +485,8 @@ func Futimes(fd int, tv []Timeval) (errno int) { ...@@ -485,8 +485,8 @@ func Futimes(fd int, tv []Timeval) (errno int) {
//sys fcntl(fd int, cmd int, arg int) (val int, errno int) //sys fcntl(fd int, cmd int, arg int) (val int, errno int)
func Recvmsg(fd int, p, oob []byte, from Sockaddr, flags int) (n, oobn int, recvflags int, errno int) { func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, errno int) {
return 0, 0, 0, EAFNOSUPPORT return 0, 0, 0, nil, EAFNOSUPPORT
} }
func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) { func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) {
......
...@@ -450,7 +450,7 @@ func Sendto(fd int, p []byte, flags int, to Sockaddr) (errno int) { ...@@ -450,7 +450,7 @@ func Sendto(fd int, p []byte, flags int, to Sockaddr) (errno int) {
return sendto(fd, p, flags, ptr, n) return sendto(fd, p, flags, ptr, n)
} }
func Recvmsg(fd int, p, oob []byte, from Sockaddr, flags int) (n, oobn int, recvflags int, errno int) { func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, errno int) {
var msg Msghdr var msg Msghdr
var rsa RawSockaddrAny var rsa RawSockaddrAny
msg.Name = (*byte)(unsafe.Pointer(&rsa)) msg.Name = (*byte)(unsafe.Pointer(&rsa))
...@@ -477,6 +477,10 @@ func Recvmsg(fd int, p, oob []byte, from Sockaddr, flags int) (n, oobn int, recv ...@@ -477,6 +477,10 @@ func Recvmsg(fd int, p, oob []byte, from Sockaddr, flags int) (n, oobn int, recv
} }
oobn = int(msg.Controllen) oobn = int(msg.Controllen)
recvflags = int(msg.Flags) recvflags = int(msg.Flags)
// source address is only specified if the socket is unconnected
if rsa.Addr.Family != 0 {
from, errno = anyToSockaddr(&rsa)
}
return return
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment