套接字忙于导致poll()延迟

时间:2013-02-06 20:37:33

标签: c sockets tcp network-programming

我正在使用TCP套接字从客户端发送数据。数据是事先准备好的,所以我总是要发送更多数据。而且,我无法改变写入的大小,否则服务器会抱怨。我做了以下事情:

while (1) {
    poll(for POLLOUT condition);
    write(to TCP socket);
    if (no more data)
        break;
}

问题是POLL需要很长时间。我假设这是套接字实际被写入(或响应)的时间。无论如何,我可以减少在民意调查中花费的时间吗?它目前是一个主要的瓶颈。

2 个答案:

答案 0 :(得分:3)

当有足够的缓冲空间来排队更多数据时,

Poll将引发POLLOUT事件。 (请看这个链接 - Man (7) socket

如果没有,则表示写入缓冲区已满,这意味着您的写入速度比其他对等体的读取速度快。或者只是网络比你预期的要慢。

答案 1 :(得分:3)

  

套接字正忙导致poll()

延迟

当然可以。这就是poll()的用途。延迟直到套接字变得可读或可写。

你的作家比你的读者更快。在阅读端寻找解决方案。你的写作结束表现正常。

然而,每次在该循环的头部调用它都是没有意义的。只有在需要知道套接字变为可写时才调用它。它通常是可写的,除非你的套接字发送缓冲区已满,所以每次调用它都是浪费时间。

继续写作直到你得到EAGAIN/EWOULDBLOCK. 然后是时候调用poll(),告诉你套接字发送缓冲区中是否有空格。然后就像以前一样重新开始写作。