【问题标题】:the select() socket system call on mac osx taking a long time for readsmac osx 上的 select() 套接字系统调用需要很长时间才能读取
【发布时间】:2010-08-20 16:01:00
【问题描述】:

我们正在开发一个需要通过 TCP 发送和接收数据的跨平台网络应用程序。在 linux 上,我们使用select() 等待发送和接收以确保套接字已准备好。然而,在 OSX 上,select for read 需要很长的时间才能返回——超过 20 秒。 select() 没有超时——我们的超时时间是 60 秒,并且数据正在返回,它只是 可笑 慢。这只发生在读取,而不是发送。网络似乎很好(同样,同一网络上的 linux 机器似乎没有相同的问题)。

有人知道在 OSX 中使用套接字编程的任何注意事项吗?

【问题讨论】:

  • 您是否尝试过使用 tcpdump 或类似工具来验证数据是否准时到达?这可能是网络问题,而不是select() 问题。
  • 哇,你是对的!服务器正在等待 30 秒发送——我的错。感谢您的帮助

标签: c macos sockets


【解决方案1】:

您是否在 OSX 上尝试过 kqueue(2) 在 Linux 上尝试过 epoll(7)?尽管是针对特定平台的 I/O 事件处理接口,但这些接口的性能和灵活性要高得多。你也可以看看libevent,它为你抽象了所有这些。

【讨论】:

  • 上面的丹尼尔确实回答了这个问题,但我将其标记为答案,因为否则它是答案。谢谢。
猜你喜欢
  • 2016-07-01
  • 2021-07-06
  • 1970-01-01
  • 2019-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-27
相关资源
最近更新 更多