github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/net/acceptor_unix.go (about) 1 // +build linux darwin netbsd freebsd openbsd dragonfly 2 3 package net 4 5 import "golang.org/x/sys/unix" 6 7 func (svr *server) acceptNewConnection(fd int) error { 8 nfd, sa, err := unix.Accept(fd) 9 if err != nil { 10 if err == unix.EAGAIN { 11 return nil 12 } 13 return err 14 } 15 if err := unix.SetNonblock(nfd, true); err != nil { 16 return err 17 } 18 el := svr.subEventLoopSet.next(nfd) 19 c := newTCPConn(nfd, el, sa) 20 _ = el.poller.Trigger(func() (err error) { 21 if err = el.poller.AddRead(nfd); err != nil { 22 return 23 } 24 el.connections[nfd] = c 25 el.calibrateCallback(el, 1) 26 err = el.loopOpen(c) 27 return 28 }) 29 return nil 30 }