>我正在与我的 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 操作系统包含以太网接口和其他库(您不应将其作为外部库导入(。
感谢您的时间和善意! :)