本文整理汇总了Golang中github.com/pebbe/zmq4.Socket.GetFd方法的典型用法代码示例。如果您正苦于以下问题:Golang Socket.GetFd方法的具体用法?Golang Socket.GetFd怎么用?Golang Socket.GetFd使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/pebbe/zmq4.Socket
的用法示例。
在下文中一共展示了Socket.GetFd方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Add
// Add registers a socket for sending and/or receiving. The caller can't
// access the socket directly after this. The send channel (if any) should be
// closed by the caller.
func (io *IO) Add(s *zmq.Socket, send <-chan Data, recv chan<- Data) (err error) {
fd, err := s.GetFd()
if err != nil {
return
}
w := newWorker()
io.lock.Lock()
io.workers[int32(fd)] = w
io.lock.Unlock()
defer func() {
if err != nil {
io.lock.Lock()
delete(io.workers, int32(fd))
io.lock.Unlock()
}
}()
e := &syscall.EpollEvent{
Events: syscall.EPOLLIN | syscall.EPOLLET&0xffffffff,
Fd: int32(fd),
}
if err = syscall.EpollCtl(io.epollFd, syscall.EPOLL_CTL_ADD, fd, e); err != nil {
return
}
state, err := s.GetEvents()
if err != nil {
syscall.EpollCtl(io.epollFd, syscall.EPOLL_CTL_DEL, fd, nil)
return
}
go func() {
defer s.Close()
defer syscall.EpollCtl(io.epollFd, syscall.EPOLL_CTL_DEL, fd, nil)
w.socketLoop(s, send, recv, state)
}()
return
}
示例2: Remove
// Remove closes a socket. If it has been registered, it will be removed. The
// recv channel (if any) will be closed.
func (io *IO) Remove(s *zmq.Socket) (err error) {
fd, err := s.GetFd()
if err != nil {
return
}
io.lock.Lock()
w := io.workers[int32(fd)]
if w != nil {
delete(io.workers, int32(fd))
}
io.lock.Unlock()
if w != nil {
w.close()
} else {
err = s.Close()
}
return
}