mbed 套接字连接需要很长时间
mbed socket connection takes a long time
>我正在与我的 Mbed 控制器战斗,它赢了 :/我的部分代码如下:
eth.connect();
pc.printf("ethernet OK");
sock.set_blocking(false,200);
pc.printf(" socket setting OK ");
sock.connect("192.168.1.100", 80);
pc.printf("GO! GO! GO!");
conn = sock.is_connected();
当服务器打开时,我可以使用套接字连接,没有问题。但是当我关闭服务器时,我的程序在 sock.connect(...( 行中等待了很长时间,然后它继续前进。我希望它向前发展,但我不想等这么长时间:/
我发现我应该将套接字设置从阻塞更改为非阻塞,并将超时从默认值 = 1500 更改为更少。我尽可能地更改了它: - 我的
socket.h库的一部分:void set_blocking(bool blocking, unsigned int timeout=200);
- 我的插座的一部分.cpp库:Socket::Socket() : _sock_fd(-1), _blocking(false), _timeout(200)
仍然什么都没有。它等待大约 17-18 秒,但我想将其更改为最长 1-2 秒。
如果你给我任何提示,我会很高兴:)
假设您使用的是mbed OS,请将套接字设置为阻塞,并将超时设置为您认为合适的任何值。无需修改。方法语法可以在此处看到。
但是,我在重现您的问题时遇到问题。您可以使用调试器并确认应用程序是否挂在此行 - https://github.com/ARMmbed/mbed-os/blob/533e6f0febb5ea582a61f0c8aaf686c70333524f/features/netsocket/TCPSocket.cpp#L57?
棉花糖的建议应该没问题。
从理论上讲,您也可以尝试将TCP_SYNMAXRTX宏设置为更低的值。不过,它可能会产生其他一些不可预见的后果(我不确定,因为我对 LwIP 了解不多(。
首先我需要说,TCP_SYNMAXRTX改变是一件事情,真正可以帮助我的东西,它帮助了我,但一点也没有。就我而言,重要的是将mbed操作系统更改为最新版本。以前有带有套接字设置的库,但实际上它们工作正常,因为 mbed 操作系统包含以太网接口和其他库(您不应将其作为外部库导入(。
感谢您的时间和善意! :)
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- mbed 套接字连接需要很长时间
- 提升:套接字读/写所需时间
- 为什么 Windows udp 接收套接字上的超时总是比 SO_RCVTIMEO 设置的长 500 毫秒
- 如何使用套接字编程获取系统日期和时间
- 通过套接字C++发送长字符串
- 如何检查套接字在一段时间内未收到
- Zmq 套接字在一段时间后不工作
- 读取Windows套接字上的SIO_KEEPALIVE_VALS字段(用于保持空闲和间隔时间)
- 在Windows套接字编程中,Ioctlsocket或recv需要更多的时间来执行
- 套接字将在一段时间后死亡而不能重新连接
- C++基于 TCP 的服务器套接字需要一段时间才能返回 10054 错误。它不会立即返回
- 套接字编程中的Select在windows中会挂起一段时间