TCP发送需要很长时间

时间:2016-03-28 08:12:41

标签: sockets tcp system-calls send strace

代理服务器中出现此问题,代码为

gettimeofday(&start, NULL);
sendLen = ::send(connection->Fd(), buffer->rdPtr, wantSendLen, 0);
gettimeofday(&stop, NULL);
uint64_t send_buf_cost = (stop.tv_sec - start.tv_sec) * 1000000 + (stop.tv_usec - start.tv_usec);
LOGGER_LOG(m_logger, "send time:%lu", send_buf_cost);

当fd是NON_BLOCK套接字并且wantSendLen小于200字节时,发送调用在日志中偶尔需要50ms以上。

之后,我使用strace来证明它

  

strace -o output.txt -T -tt -e trace = network -p 15550

我可以找到像这样的长时间通话

  

14:14:31.510672 sendto(49,   " * 2 \ r \ n $ 3 \ r \ nget \ r \ n $ 88 \ r \ n \ nmsgpool:fgmsg:" ...,108,0,NULL,0)= 108   < 0.068225>

为什么发送电话有时会这么慢?我认为send调用只是将数据复制到套接字发送缓冲区。

0 个答案:

没有答案