【发布时间】:2016-09-01 11:32:35
【问题描述】:
我遇到了一个奇怪的问题,即在 Linux 中的套接字上 select 花费了意想不到的时间。
- 服务器一直在接收数据,接收套接字缓冲区大小为65536。
- 一个客户端一直在发送数据,发送套接字缓冲区大小为4096。
一般来说,数据传输非常快。但是:客户端中的一个选择来测试写入是否不会阻塞需要很长时间(发送数据而不调用select之前:0.5s,发送相同的数据在实际发送数据之前调用select:5s)。该问题特定于缓冲区大小。如果我将客户端中的发送缓冲区增加到 4*4096,问题就会消失。
现在我想知道为什么特定缓冲区大小的选择需要这么长时间。示例代码在这里:http://pastebin.com/PqisLnLU
相同的代码在 Windows 甚至 Linux 的 Windows 子系统上运行而没有这些奇怪的行为。
谢谢!
【问题讨论】:
-
“客户端中的一个选择来测试写入是否不会阻塞需要很长时间(没有选择:0.5s,选择 5s)” - 你怎么能有一个没有选择的选择... ?
-
谢谢,已解决问题。