我正在使用TCP套接字从客户端发送数据。数据是事先准备好的,所以我总是要发送更多数据。而且,我无法改变写入的大小,否则服务器会抱怨。我做了以下事情:
while (1) {
poll(for POLLOUT condition);
write(to TCP socket);
if (no more data)
break;
}
问题是POLL需要很长时间。我假设这是套接字实际被写入(或响应)的时间。无论如何,我可以减少在民意调查中花费的时间吗?它目前是一个主要的瓶颈。
答案 0 :(得分:3)
Poll
将引发POLLOUT
事件。 (请看这个链接 - Man (7) socket)
如果没有,则表示写入缓冲区已满,这意味着您的写入速度比其他对等体的读取速度快。或者只是网络比你预期的要慢。
答案 1 :(得分:3)
套接字正忙导致poll()
延迟
当然可以。这就是poll()
的用途。延迟直到套接字变得可读或可写。
你的作家比你的读者更快。在阅读端寻找解决方案。你的写作结束表现正常。
然而,每次在该循环的头部调用它都是没有意义的。只有在需要知道套接字变为可写时才调用它。它通常是可写的,除非你的套接字发送缓冲区已满,所以每次调用它都是浪费时间。
继续写作直到你得到EAGAIN/EWOULDBLOCK.
然后是时候调用poll()
,告诉你套接字发送缓冲区中是否有空格。然后就像以前一样重新开始写作。