0

我正在使用 TCP 套接字从客户端发送数据。数据是提前准备好的,所以我总是有更多的数据要发送。此外,我不能更改写入的大小,否则服务器会抱怨。我执行以下操作:

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

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

4

2 回答 2

3

PollPOLLOUT当有足够的缓冲区空间将更多数据排入队列时,将引发一个事件。(看这个链接 - Man (7) socket

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

于 2013-02-06T21:23:39.887 回答
3

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

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

你的作者比你的读者快。在阅读端寻找解决方案。您的写作端表现正确。

但是,每次在该循环的开头调用它是没有意义的。仅当您需要知道套接字已变为可写时才调用它。它通常一直是可写的,除非您的套接字发送缓冲区已满,因此每次调用它都是浪费时间。

继续写,直到你得到EAGAIN/EWOULDBLOCK. Then is the time to call poll(),告诉你套接字发送缓冲区何时有空间。然后像以前一样重新开始写作。

于 2013-02-07T01:11:15.720 回答