]> Cypherpunks repositories - gostls13.git/commitdiff
net, syscall: return source address in Recvmsg
authorAlbert Strasheim <fullung@gmail.com>
Wed, 19 Jan 2011 19:34:53 +0000 (14:34 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 19 Jan 2011 19:34:53 +0000 (14:34 -0500)
R=rsc
CC=golang-dev
https://golang.org/cl/3766042

src/pkg/net/fd.go
src/pkg/syscall/syscall_bsd.go
src/pkg/syscall/syscall_linux.go

index 5ec91845dfc5bcb3cef22358f0e47204d30b4542..896178f18efeff4a7b02be082b1f55d64cf5fe55 100644 (file)
@@ -417,7 +417,7 @@ func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S
        var oserr os.Error
        for {
                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 {
                        pollserver.WaitRead(fd)
                        continue
index ff99fd9e6d48e7d07758aa47da8327dde37d5359..3c4ac51dc0a90adeecbc6d399525ca0a24819a9b 100644 (file)
@@ -485,8 +485,8 @@ func Futimes(fd int, tv []Timeval) (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) {
-       return 0, 0, 0, EAFNOSUPPORT
+func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, errno int) {
+       return 0, 0, 0, nil, EAFNOSUPPORT
 }
 
 func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (errno int) {
index d0f314c88bb05d3153644aec53834389092790fb..d20c035b5ab332fe1610b7091aefb66886a611e5 100644 (file)
@@ -450,7 +450,7 @@ func Sendto(fd int, p []byte, flags int, to Sockaddr) (errno int) {
        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 rsa RawSockaddrAny
        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
        }
        oobn = int(msg.Controllen)
        recvflags = int(msg.Flags)
+       // source address is only specified if the socket is unconnected
+       if rsa.Addr.Family != 0 {
+               from, errno = anyToSockaddr(&rsa)
+       }
        return
 }