Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 用于连接套接字的Epoll事件_Sockets_Networking_Epoll - Fatal编程技术网

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)]'