Sockets 用于连接套接字的Epoll事件
我创建了Sockets 用于连接套接字的Epoll事件,sockets,networking,epoll,Sockets,Networking,Epoll,我创建了epoll,并注册了一些非阻塞套接字,这些套接字尝试连接到本地主机上关闭的端口。为什么epoll告诉我,我可以写入这个套接字(它为其中一个创建的带有eventmask的套接字提供包含epolout的事件)?但是这个套接字没有打开,如果我尝试向它发送一些东西,我会收到一个错误连接被拒绝 另一个问题——即使是EPOLLHUP也意味着什么?我以为这是拒绝连接的事件。但在这种情况下,事件如何同时具有EPOLLHUP和EPOLLOUT事件 Python上的示例代码: 所有的poll保证的是,您的
epoll
,并注册了一些非阻塞套接字,这些套接字尝试连接到本地主机上关闭的端口。为什么epoll
告诉我,我可以写入这个套接字(它为其中一个创建的带有eventmask的套接字提供包含epolout的事件)?但是这个套接字没有打开,如果我尝试向它发送一些东西,我会收到一个错误连接被拒绝
另一个问题——即使是EPOLLHUP也意味着什么?我以为这是拒绝连接的事件。但在这种情况下,事件如何同时具有EPOLLHUP和EPOLLOUT事件
Python上的示例代码:
所有的
poll
保证的是,您的应用程序在调用相应的函数后不会被阻塞。所以你得到了你已经支付的东西-你现在可以放心,写入这个套接字不会阻塞-它也不会阻塞,是吗
Poll从不保证相应的操作将成功所有
Poll
保证的是调用相应函数后应用程序不会阻塞。所以你得到了你已经支付的东西-你现在可以放心,写入这个套接字不会阻塞-它也不会阻塞,是吗
Poll从不保证在文件描述符“就绪”时相应的操作将成功
Poll/select/epoll
返回,但这只是意味着操作不会阻塞(不一定能够成功写入)
同样对于EPOLLIN
:例如,当插座关闭时,它将返回ready;在这种情况下,您实际上无法从中读取数据
EPOLLHUP
表示连接出现“挂断”。这只会在你真正建立了联系之后才会发生。此外,文档()还指出,您不需要包含它:
埃波尔胡普
关联的文件描述符发生挂起。epoll_wait(2)将始终等待此事件;没有必要在事件中设置它
poll/select/epoll
在文件描述符处于“就绪”状态时返回,但这只意味着操作不会阻塞(并不意味着您一定能够成功写入)
同样对于EPOLLIN
:例如,当插座关闭时,它将返回ready;在这种情况下,您实际上无法从中读取数据
EPOLLHUP
表示连接出现“挂断”。这只会在你真正建立了联系之后才会发生。此外,文档()还指出,您不需要包含它:
埃波尔胡普
关联的文件描述符发生挂起。epoll_wait(2)将始终等待此事件;没有必要在事件中设置它
哦,当然=)谢谢,我对投票的工作原理有误解。哦,当然=)谢谢,我对投票的工作原理有误解。
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)]'