Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(889)

Side by Side Diff: src/pkg/net/fd_windows.go

Issue 8608044: code review 8608044: net: separate pollster initialization from network file descriptor allocation (Closed)
Patch Set: diff -r edb46df3ae05 https://code.google.com/p/go Created 10 years, 7 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pkg/net/fd_unix.go ('k') | src/pkg/net/file_unix.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 The Go Authors. All rights reserved. 1 // Copyright 2010 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 package net 5 package net
6 6
7 import ( 7 import (
8 "errors" 8 "errors"
9 "io" 9 "io"
10 "os" 10 "os"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 235
236 // wait server 236 // wait server
237 pd pollDesc 237 pd pollDesc
238 } 238 }
239 239
240 func newFD(sysfd syscall.Handle, family, sotype int, net string) (*netFD, error) { 240 func newFD(sysfd syscall.Handle, family, sotype int, net string) (*netFD, error) {
241 if initErr != nil { 241 if initErr != nil {
242 return nil, initErr 242 return nil, initErr
243 } 243 }
244 onceStartServer.Do(startServer) 244 onceStartServer.Do(startServer)
245 » fd := &netFD{ 245 » return &netFD{sysfd: sysfd, family: family, sotype: sotype, net: net}, n il
246 » » sysfd: sysfd, 246 }
247 » » family: family, 247
248 » » sotype: sotype, 248 func (fd *netFD) init() error {
249 » » net: net,
250 » }
251 if err := fd.pd.Init(fd); err != nil { 249 if err := fd.pd.Init(fd); err != nil {
252 » » return nil, err 250 » » return err
253 } 251 }
254 fd.rop.mode = 'r' 252 fd.rop.mode = 'r'
255 fd.wop.mode = 'w' 253 fd.wop.mode = 'w'
256 fd.rop.fd = fd 254 fd.rop.fd = fd
257 fd.wop.fd = fd 255 fd.wop.fd = fd
258 fd.rop.runtimeCtx = fd.pd.runtimeCtx 256 fd.rop.runtimeCtx = fd.pd.runtimeCtx
259 fd.wop.runtimeCtx = fd.pd.runtimeCtx 257 fd.wop.runtimeCtx = fd.pd.runtimeCtx
260 if !canCancelIO { 258 if !canCancelIO {
261 fd.rop.errc = make(chan error) 259 fd.rop.errc = make(chan error)
262 fd.rop.errc = make(chan error) 260 fd.rop.errc = make(chan error)
263 } 261 }
264 » return fd, nil 262 » return nil
265 } 263 }
266 264
267 func (fd *netFD) setAddr(laddr, raddr Addr) { 265 func (fd *netFD) setAddr(laddr, raddr Addr) {
268 fd.laddr = laddr 266 fd.laddr = laddr
269 fd.raddr = raddr 267 fd.raddr = raddr
270 runtime.SetFinalizer(fd, (*netFD).Close) 268 runtime.SetFinalizer(fd, (*netFD).Close)
271 } 269 }
272 270
273 func (fd *netFD) connect(la, ra syscall.Sockaddr) error { 271 func (fd *netFD) connect(la, ra syscall.Sockaddr) error {
274 if !canUseConnectEx(fd.net) { 272 if !canUseConnectEx(fd.net) {
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 if err != nil { 464 if err != nil {
467 return nil, &OpError{"socket", fd.net, fd.laddr, err} 465 return nil, &OpError{"socket", fd.net, fd.laddr, err}
468 } 466 }
469 467
470 // Associate our new socket with IOCP. 468 // Associate our new socket with IOCP.
471 netfd, err := newFD(s, fd.family, fd.sotype, fd.net) 469 netfd, err := newFD(s, fd.family, fd.sotype, fd.net)
472 if err != nil { 470 if err != nil {
473 closesocket(s) 471 closesocket(s)
474 return nil, &OpError{"accept", fd.net, fd.laddr, err} 472 return nil, &OpError{"accept", fd.net, fd.laddr, err}
475 } 473 }
474 if err := netfd.init(); err != nil {
475 fd.Close()
476 return nil, err
477 }
476 478
477 // Submit accept request. 479 // Submit accept request.
478 o := &fd.rop 480 o := &fd.rop
479 o.mu.Lock() 481 o.mu.Lock()
480 defer o.mu.Unlock() 482 defer o.mu.Unlock()
481 o.handle = s 483 o.handle = s
482 var rawsa [2]syscall.RawSockaddrAny 484 var rawsa [2]syscall.RawSockaddrAny
483 o.rsan = int32(unsafe.Sizeof(rawsa[0])) 485 o.rsan = int32(unsafe.Sizeof(rawsa[0]))
484 _, err = iosrv.ExecIO(o, "AcceptEx", func(o *operation) error { 486 _, err = iosrv.ExecIO(o, "AcceptEx", func(o *operation) error {
485 return syscall.AcceptEx(o.fd.sysfd, o.handle, (*byte)(unsafe.Poi nter(&rawsa[0])), 0, uint32(o.rsan), uint32(o.rsan), &o.qty, &o.o) 487 return syscall.AcceptEx(o.fd.sysfd, o.handle, (*byte)(unsafe.Poi nter(&rawsa[0])), 0, uint32(o.rsan), uint32(o.rsan), &o.qty, &o.o)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 519
518 var errNoSupport = errors.New("address family not supported") 520 var errNoSupport = errors.New("address family not supported")
519 521
520 func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S ockaddr, err error) { 522 func (fd *netFD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.S ockaddr, err error) {
521 return 0, 0, 0, nil, errNoSupport 523 return 0, 0, 0, nil, errNoSupport
522 } 524 }
523 525
524 func (fd *netFD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oob n int, err error) { 526 func (fd *netFD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oob n int, err error) {
525 return 0, 0, errNoSupport 527 return 0, 0, errNoSupport
526 } 528 }
OLDNEW
« no previous file with comments | « src/pkg/net/fd_unix.go ('k') | src/pkg/net/file_unix.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b