【发布时间】:2016-09-01 22:34:11
【问题描述】:
我创建epoll 并注册一些非阻塞套接字,它们尝试连接到本地主机上的封闭端口。为什么epoll 告诉我,我可以写入此套接字(它为创建的具有事件掩码的套接字之一提供事件包含 EPOLLOUT)?但是这个套接字没有打开,如果我尝试向它发送一些东西,我会收到一个错误Connection refused。
另一个问题 - EPOLLHUP 是什么意思?我认为这是拒绝连接的事件。但是在这种情况下,事件如何同时具有 EPOLLHUP 和 EPOLLOUT 事件呢?
Python 上的示例代码:
import socket
import select
poll = select.epoll()
fd_to_sock = {}
for i in range(1, 3):
s = socket.socket()
s.setblocking(0)
s.connect_ex(('localhost', i))
poll.register(s, select.EPOLLOUT)
fd_to_sock[s.fileno()] = s
print(poll.poll(0.1))
# prints '[(4, 28), (5, 28)]'
【问题讨论】:
标签: sockets networking epoll