]> Cypherpunks repositories - gostls13.git/commitdiff
Windows: net, syscall: implement SetsockoptIPMReq(), move to winsock v2.2 for multica...
authorPaul Lalonde <paul.a.lalonde@gmail.com>
Thu, 8 Sep 2011 06:32:40 +0000 (16:32 +1000)
committerNigel Tao <nigeltao@golang.org>
Thu, 8 Sep 2011 06:32:40 +0000 (16:32 +1000)
I don't know the protocol regarding the zsyscall files which appear to
be hand-generated, so I've re-done them and added them to the change.

R=rsc, alex.brainman, nigeltao
CC=golang-dev
https://golang.org/cl/4975060

src/pkg/net/fd_windows.go
src/pkg/syscall/syscall_windows.go
src/pkg/syscall/zsyscall_windows_386.go
src/pkg/syscall/zsyscall_windows_amd64.go

index 3757e143dca143eb525af1c15695f75e860fd0f1..f15b6c04743168bf6e10730b96541d4a9dab1b41 100644 (file)
@@ -23,7 +23,7 @@ var initErr os.Error
 
 func init() {
        var d syscall.WSAData
-       e := syscall.WSAStartup(uint32(0x101), &d)
+       e := syscall.WSAStartup(uint32(0x202), &d)
        if e != 0 {
                initErr = os.NewSyscallError("WSAStartup", e)
        }
index 7bc26d3cf4d5d923f36799cce432bb5db558c656..26939cc8dde758c3624154ff82e685f0b36a4be1 100644 (file)
@@ -220,7 +220,7 @@ func NewCallback(fn interface{}) uintptr
 //sys  FlushViewOfFile(addr uintptr, length uintptr) (errno int)
 //sys  VirtualLock(addr uintptr, length uintptr) (errno int)
 //sys  VirtualUnlock(addr uintptr, length uintptr) (errno int)
-//sys  TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (errno int) = wsock32.TransmitFile
+//sys  TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (errno int) = mswsock.TransmitFile
 
 // syscall interface implementation for other packages
 
@@ -480,20 +480,20 @@ func Chmod(path string, mode uint32) (errno int) {
 
 // net api calls
 
-//sys  WSAStartup(verreq uint32, data *WSAData) (sockerrno int) = wsock32.WSAStartup
-//sys  WSACleanup() (errno int) [failretval==-1] = wsock32.WSACleanup
+//sys  WSAStartup(verreq uint32, data *WSAData) (sockerrno int) = ws2_32.WSAStartup
+//sys  WSACleanup() (errno int) [failretval==-1] = ws2_32.WSACleanup
 //sys  WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (errno int) [failretval==-1] = ws2_32.WSAIoctl
-//sys  socket(af int32, typ int32, protocol int32) (handle Handle, errno int) [failretval==InvalidHandle] = wsock32.socket
-//sys  Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (errno int) [failretval==-1] = wsock32.setsockopt
-//sys  bind(s Handle, name uintptr, namelen int32) (errno int) [failretval==-1] = wsock32.bind
-//sys  connect(s Handle, name uintptr, namelen int32) (errno int) [failretval==-1] = wsock32.connect
-//sys  getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = wsock32.getsockname
-//sys  getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = wsock32.getpeername
-//sys  listen(s Handle, backlog int32) (errno int) [failretval==-1] = wsock32.listen
-//sys  shutdown(s Handle, how int32) (errno int) [failretval==-1] = wsock32.shutdown
-//sys  Closesocket(s Handle) (errno int) [failretval==-1] = wsock32.closesocket
-//sys  AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (errno int) = wsock32.AcceptEx
-//sys  GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = wsock32.GetAcceptExSockaddrs
+//sys  socket(af int32, typ int32, protocol int32) (handle Handle, errno int) [failretval==InvalidHandle] = ws2_32.socket
+//sys  Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (errno int) [failretval==-1] = ws2_32.setsockopt
+//sys  bind(s Handle, name uintptr, namelen int32) (errno int) [failretval==-1] = ws2_32.bind
+//sys  connect(s Handle, name uintptr, namelen int32) (errno int) [failretval==-1] = ws2_32.connect
+//sys  getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = ws2_32.getsockname
+//sys  getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (errno int) [failretval==-1] = ws2_32.getpeername
+//sys  listen(s Handle, backlog int32) (errno int) [failretval==-1] = ws2_32.listen
+//sys  shutdown(s Handle, how int32) (errno int) [failretval==-1] = ws2_32.shutdown
+//sys  Closesocket(s Handle) (errno int) [failretval==-1] = ws2_32.closesocket
+//sys  AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (errno int) = mswsock.AcceptEx
+//sys  GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs
 //sys  WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSARecv
 //sys  WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSASend
 //sys  WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32,  from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (errno int) [failretval==-1] = ws2_32.WSARecvFrom
@@ -697,8 +697,8 @@ type Linger struct {
 }
 
 const (
-       IP_ADD_MEMBERSHIP = iota
-       IP_DROP_MEMBERSHIP
+       IP_ADD_MEMBERSHIP  = 0xc
+       IP_DROP_MEMBERSHIP = 0xd
 )
 
 type IPMreq struct {
@@ -711,8 +711,10 @@ type IPv6Mreq struct {
        Interface uint32
 }
 
-func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (errno int)        { return EWINDOWS }
-func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (errno int)     { return EWINDOWS }
+func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (errno int) { return EWINDOWS }
+func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (errno int) {
+       return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq)))
+}
 func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (errno int) { return EWINDOWS }
 func BindToDevice(fd Handle, device string) (errno int)                        { return EWINDOWS }
 
index 24c82a479268d929f329f1e71421450fca2f0b71..845004aa3e0d0e844a1e426efe9475bc7f72a1d0 100644 (file)
@@ -9,7 +9,7 @@ var (
        modkernel32 = NewLazyDLL("kernel32.dll")
        modadvapi32 = NewLazyDLL("advapi32.dll")
        modshell32  = NewLazyDLL("shell32.dll")
-       modwsock32  = NewLazyDLL("wsock32.dll")
+       modmswsock  = NewLazyDLL("mswsock.dll")
        modws2_32   = NewLazyDLL("ws2_32.dll")
        moddnsapi   = NewLazyDLL("dnsapi.dll")
        modiphlpapi = NewLazyDLL("iphlpapi.dll")
@@ -79,21 +79,21 @@ var (
        procFlushViewOfFile            = modkernel32.NewProc("FlushViewOfFile")
        procVirtualLock                = modkernel32.NewProc("VirtualLock")
        procVirtualUnlock              = modkernel32.NewProc("VirtualUnlock")
-       procTransmitFile               = modwsock32.NewProc("TransmitFile")
-       procWSAStartup                 = modwsock32.NewProc("WSAStartup")
-       procWSACleanup                 = modwsock32.NewProc("WSACleanup")
+       procTransmitFile               = modmswsock.NewProc("TransmitFile")
+       procWSAStartup                 = modws2_32.NewProc("WSAStartup")
+       procWSACleanup                 = modws2_32.NewProc("WSACleanup")
        procWSAIoctl                   = modws2_32.NewProc("WSAIoctl")
-       procsocket                     = modwsock32.NewProc("socket")
-       procsetsockopt                 = modwsock32.NewProc("setsockopt")
-       procbind                       = modwsock32.NewProc("bind")
-       procconnect                    = modwsock32.NewProc("connect")
-       procgetsockname                = modwsock32.NewProc("getsockname")
-       procgetpeername                = modwsock32.NewProc("getpeername")
-       proclisten                     = modwsock32.NewProc("listen")
-       procshutdown                   = modwsock32.NewProc("shutdown")
-       procclosesocket                = modwsock32.NewProc("closesocket")
-       procAcceptEx                   = modwsock32.NewProc("AcceptEx")
-       procGetAcceptExSockaddrs       = modwsock32.NewProc("GetAcceptExSockaddrs")
+       procsocket                     = modws2_32.NewProc("socket")
+       procsetsockopt                 = modws2_32.NewProc("setsockopt")
+       procbind                       = modws2_32.NewProc("bind")
+       procconnect                    = modws2_32.NewProc("connect")
+       procgetsockname                = modws2_32.NewProc("getsockname")
+       procgetpeername                = modws2_32.NewProc("getpeername")
+       proclisten                     = modws2_32.NewProc("listen")
+       procshutdown                   = modws2_32.NewProc("shutdown")
+       procclosesocket                = modws2_32.NewProc("closesocket")
+       procAcceptEx                   = modmswsock.NewProc("AcceptEx")
+       procGetAcceptExSockaddrs       = modmswsock.NewProc("GetAcceptExSockaddrs")
        procWSARecv                    = modws2_32.NewProc("WSARecv")
        procWSASend                    = modws2_32.NewProc("WSASend")
        procWSARecvFrom                = modws2_32.NewProc("WSARecvFrom")
index 06bb114babb5f8519a69c75d572e0ae202b04e60..0904085b9c3b4962802de4184296abf1093f3e9b 100644 (file)
@@ -9,7 +9,7 @@ var (
        modkernel32 = NewLazyDLL("kernel32.dll")
        modadvapi32 = NewLazyDLL("advapi32.dll")
        modshell32  = NewLazyDLL("shell32.dll")
-       modwsock32  = NewLazyDLL("wsock32.dll")
+       modmswsock  = NewLazyDLL("mswsock.dll")
        modws2_32   = NewLazyDLL("ws2_32.dll")
        moddnsapi   = NewLazyDLL("dnsapi.dll")
        modiphlpapi = NewLazyDLL("iphlpapi.dll")
@@ -79,21 +79,21 @@ var (
        procFlushViewOfFile            = modkernel32.NewProc("FlushViewOfFile")
        procVirtualLock                = modkernel32.NewProc("VirtualLock")
        procVirtualUnlock              = modkernel32.NewProc("VirtualUnlock")
-       procTransmitFile               = modwsock32.NewProc("TransmitFile")
-       procWSAStartup                 = modwsock32.NewProc("WSAStartup")
-       procWSACleanup                 = modwsock32.NewProc("WSACleanup")
+       procTransmitFile               = modmswsock.NewProc("TransmitFile")
+       procWSAStartup                 = modws2_32.NewProc("WSAStartup")
+       procWSACleanup                 = modws2_32.NewProc("WSACleanup")
        procWSAIoctl                   = modws2_32.NewProc("WSAIoctl")
-       procsocket                     = modwsock32.NewProc("socket")
-       procsetsockopt                 = modwsock32.NewProc("setsockopt")
-       procbind                       = modwsock32.NewProc("bind")
-       procconnect                    = modwsock32.NewProc("connect")
-       procgetsockname                = modwsock32.NewProc("getsockname")
-       procgetpeername                = modwsock32.NewProc("getpeername")
-       proclisten                     = modwsock32.NewProc("listen")
-       procshutdown                   = modwsock32.NewProc("shutdown")
-       procclosesocket                = modwsock32.NewProc("closesocket")
-       procAcceptEx                   = modwsock32.NewProc("AcceptEx")
-       procGetAcceptExSockaddrs       = modwsock32.NewProc("GetAcceptExSockaddrs")
+       procsocket                     = modws2_32.NewProc("socket")
+       procsetsockopt                 = modws2_32.NewProc("setsockopt")
+       procbind                       = modws2_32.NewProc("bind")
+       procconnect                    = modws2_32.NewProc("connect")
+       procgetsockname                = modws2_32.NewProc("getsockname")
+       procgetpeername                = modws2_32.NewProc("getpeername")
+       proclisten                     = modws2_32.NewProc("listen")
+       procshutdown                   = modws2_32.NewProc("shutdown")
+       procclosesocket                = modws2_32.NewProc("closesocket")
+       procAcceptEx                   = modmswsock.NewProc("AcceptEx")
+       procGetAcceptExSockaddrs       = modmswsock.NewProc("GetAcceptExSockaddrs")
        procWSARecv                    = modws2_32.NewProc("WSARecv")
        procWSASend                    = modws2_32.NewProc("WSASend")
        procWSARecvFrom                = modws2_32.NewProc("WSARecvFrom")