MCPcopy Create free account
hub / github.com/encodeous/nylon / Open

Method Open

polyamide/conn/bind_windows.go:295–328  ·  view source on GitHub ↗
(port uint16)

Source from the content-addressed store, hash-verified

293}
294
295func (bind *WinRingBind) Open(port uint16) (recvFns []ReceiveFunc, selectedPort uint16, err error) {
296 bind.mu.Lock()
297 defer bind.mu.Unlock()
298 defer func() {
299 if err != nil {
300 bind.closeAndZero()
301 }
302 }()
303 if bind.isOpen.Load() != 0 {
304 return nil, 0, ErrBindAlreadyOpen
305 }
306 var sa windows.Sockaddr
307 sa, err = bind.v4.Open(windows.AF_INET, &windows.SockaddrInet4{Port: int(port)})
308 if err != nil {
309 return nil, 0, err
310 }
311 sa, err = bind.v6.Open(windows.AF_INET6, &windows.SockaddrInet6{Port: sa.(*windows.SockaddrInet4).Port})
312 if err != nil {
313 return nil, 0, err
314 }
315 selectedPort = uint16(sa.(*windows.SockaddrInet6).Port)
316 for i := 0; i < packetsPerRing; i++ {
317 err = bind.v4.InsertReceiveRequest()
318 if err != nil {
319 return nil, 0, err
320 }
321 err = bind.v6.InsertReceiveRequest()
322 if err != nil {
323 return nil, 0, err
324 }
325 }
326 bind.isOpen.Store(1)
327 return []ReceiveFunc{bind.receiveIPv4, bind.receiveIPv6}, selectedPort, err
328}
329
330func (bind *WinRingBind) Close() error {
331 bind.mu.RLock()

Callers

nothing calls this directly

Calls 3

closeAndZeroMethod · 0.95
InsertReceiveRequestMethod · 0.80
OpenMethod · 0.65

Tested by

no test coverage detected