ios - iPhone在不同端口上意外复制TCP数据包

标签 ios iphone sockets nsurlconnection boost-asio

我正在运行这个简单的基于asio的program:

Address address = Address::from_string(host);
Tcp::endpoint ep(address, port);
Tcp::resolver::iterator endpoint_iterator = resolver.resolve(ep);
Tcp::socket socket(io_service);
asio::connect(socket, endpoint_iterator);

一切在我的主机上都可以正常运行,但是当此程序在iOS(iphone和iphonesimulator)下运行时,我的嗅探器会检测到一些意外的数据包:
# client: 192.168.1.10, server: 192.168.1.100
# everything fine...
5.359761000 192.168.1.10  192.168.1.100  52712 [SYN]
5.359989000 192.168.1.100 192.168.1.10   52712 [SYN, ACK]
5.364103000 192.168.1.10  192.168.1.100  52712 [ACK]
5.364103000 192.168.1.10  192.168.1.100  52712 [FIN, ACK]
5.364386000 192.168.1.100 192.168.1.10   52712 [FIN, ACK]
5.366095000 192.168.1.10  192.168.1.100  52712 [ACK]
# Here comes unexpected part...
5.632569000 192.168.1.10  192.168.1.100  52716 [SYN]
5.632891000 192.168.1.100 192.168.1.10   52716 [SYN, ACK]
5.638314000 192.168.1.10  192.168.1.100  52716 [ACK]
5.638633000 192.168.1.10  192.168.1.100  52716 [FIN, ACK]
5.639017000 192.168.1.100 192.168.1.10   52716 [FIN, ACK]
5.644743000 192.168.1.10  192.168.1.100  52716 [ACK]

最奇怪的是,在 main(成功)退出后,接收到的意外数据包。我已经在客户端(使用模拟器时)和服务器端检测到此数据包。

它们来自哪里?我该如何解决?

更新

与原始BSD-socketsNSURLConnection的行为相同。如果我使用Safari或Chrome浏览器访问服务器,则没有此类数据包。

更新2
  • “正常”数据包转储:status line onlyexpanded
  • 带有意外数据包的
  • 转储:status line onlyexpanded

  • 更新3

    带有getpid
  • 版本:http://pastebin.com/w1niwMMU
  • 最佳答案

    我不知道这是错误还是功能,但是发生的情况是,当您的应用程序退出且返回值为0时,它会通过启动重新启动。因此,您的应用程序运行了两次,因此尝试了两次TCP连接。

    您可以通过在从主函数返回之前添加sleep(10)来验证这一点;如果您观看过程监视器,则会看到它启动,运行10秒钟,然后退出,重新启动,再运行10秒钟。

    如果您返回非零退出代码或只是不退出(因为iOS应用程序通常不退出),则不会发生这种情况。

    关于ios - iPhone在不同端口上意外复制TCP数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605916/

    相关文章:

    ios - 设置 navigationItem 标题延迟问题

    iphone - 我们是否可以显示多个 View ,其中导航栏具有不同的 Controller 作为另一个 View 的 subview ?

    iphone - 重新连接断开连接的客户端套接字

    ios - 该应用程序在 payload/appname.app/appname : _terminateWithStatus 中引用了非公共(public)选择器

    objective-c - ARC 和重用指针会耗尽内存

    javascript - JQuery Mobile Javascript 复杂方程

    Python - 使用选择器的非阻塞套接字

    iphone - 仅更新到 iOS 8 后,旧版 iOS 7 应用程序是否仍可在 AppStore 中使用?

    iphone - 发出许多网络请求的 iOS 应用程序的最佳架构?

    java - Socket服务器构建问题