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
Linux 套接字在eWould块之后但在epoll_等待之前是否可以写入?_Linux_Sockets_Epoll - Fatal编程技术网

Linux 套接字在eWould块之后但在epoll_等待之前是否可以写入?

Linux 套接字在eWould块之后但在epoll_等待之前是否可以写入?,linux,sockets,epoll,Linux,Sockets,Epoll,我有一个基于reactor的设计,在epoll\u wait中轮询许多套接字文件描述符 为了优化延迟而不是吞吐量,当写入套接字时,我们尝试立即直接写入文件描述符 在ewoodblock的情况下,我们会缓冲未写入的数据,然后等待套接字再次变为可写 下次我们的epoll\u wait返回可写的文件描述符时,我们将从缓冲数据发送 问题是,在我们收到eWoldBlock之后,套接字是否可以写入,而在我们调用epoll\u wait之前,套接字是否可以写入 也就是说,如果我们进行两次

我有一个基于reactor的设计,在
epoll\u wait
中轮询许多套接字文件描述符

为了优化延迟而不是吞吐量,当写入套接字时,我们尝试立即直接写入文件描述符

ewoodblock
的情况下,我们会缓冲未写入的数据,然后等待套接字再次变为可写

下次我们的
epoll\u wait
返回可写的文件描述符时,我们将从缓冲数据发送

问题是,在我们收到
eWoldBlock
之后,套接字是否可以写入,而在我们调用
epoll\u wait
之前,套接字是否可以写入

也就是说,如果我们进行两次
调用,其中第一次
部分写入,其余部分缓冲,然后进行第二次
,尝试立即写入,那么套接字是否可以在第一次和第二次写入调用之间变为可写,我们最终会在远端接收到无序数据

套接字在eWould块之后但在epoll_等待之前是否可以写入

对。它可以在套接字发送缓冲区中有空间时变为可写,只要对等方从应用程序异步确认其中现有数据的任何前缀,就会发生这种情况

为了优化延迟而不是吞吐量,在写入套接字时,我们尝试立即直接写入文件描述符

很好

在EWoldblock事件中,我们缓冲未写入的数据,然后等待套接字再次变为可写。下次我们的epoll_wait将文件描述符返回为可写时,我们将从缓冲数据发送

又是VG

问题是,在我们收到一个eWoldBlock之后,但在我们调用epoll_wait之前,套接字是否可以写入

是的,见上文

也就是说,如果我们进行两次写调用,其中第一次写部分被写,其余部分被缓冲,然后进行第二次写,尝试立即写,那么套接字在第一次和第二次写调用之间是否可以写

是的,见上文

我们最终会在远端接收到无序数据

我不知道怎么做,除非你是从多个线程向套接字写入

套接字在eWould块之后但在epoll_等待之前是否可以写入

对。它可以在套接字发送缓冲区中有空间时变为可写,只要对等方从应用程序异步确认其中现有数据的任何前缀,就会发生这种情况

为了优化延迟而不是吞吐量,在写入套接字时,我们尝试立即直接写入文件描述符

很好

在EWoldblock事件中,我们缓冲未写入的数据,然后等待套接字再次变为可写。下次我们的epoll_wait将文件描述符返回为可写时,我们将从缓冲数据发送

又是VG

问题是,在我们收到一个eWoldBlock之后,但在我们调用epoll_wait之前,套接字是否可以写入

是的,见上文

也就是说,如果我们进行两次写调用,其中第一次写部分被写,其余部分被缓冲,然后进行第二次写,尝试立即写,那么套接字在第一次和第二次写调用之间是否可以写

是的,见上文

我们最终会在远端接收到无序数据

我不知道怎么做,除非你是从多个线程向套接字写入

问题是,在我们收到
eWoldBlock
之后,套接字是否可以写入,而在我们调用
epoll\u wait
之前,套接字是否可以写入

是的,它可以。在执行
ewooldblock
时,套接字缓冲区已满。但是,一旦对等方确认了一些数据,并且套接字缓冲区中的空间被清空,套接字就会再次变为可写。这发生在代码之外的后台,因此套接字可以随时写入

也就是说,如果我们进行2次
写入
调用,其中第一次写入
部分写入,其余部分缓冲,然后进行第二次写入
,尝试立即写入,那么套接字是否可以在第一次和第二次写入调用之间写入,我们最终会在远端接收到无序数据

是的,它可以。这将是代码逻辑中的一个错误,因为您试图在完成写入任何仍在等待发送的缓冲数据之前将新数据写入套接字

当检测到
ewoodblock
并开始缓冲数据时,停止调用
write()
以获取任何新数据,直到完全清除缓冲区。如果您需要发送新数据,而缓冲区中已经有数据,只需将新数据附加到缓冲区的末尾,然后继续,甚至不调用
write()
。每当套接字报告为可写时,请检查缓冲区中是否有任何挂起的数据,如果有,则从缓冲区前端发送尽可能多的数据,并在移动过程中删除成功发送的数据,直到缓冲区被清除或再次报告
ewoldblock

问题是,在我们收到
eWoldBlock
之后,套接字是否可以写入,而在我们调用
epoll\u wait
之前,套接字是否可以写入

是的,它可以。在执行
ewooldblock
时,套接字缓冲区已满。但是,一旦对等方确认了一些数据,并且套接字缓冲区中的空间被清空,套接字就会再次变为可写。这发生在代码之外的后台,因此套接字可以随时写入

也就是说,如果我们执行2
write