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  }