我和我的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);
- 我的socket.cpp库的一部分:
Socket::Socket() : _sock_fd(-1), _blocking(false), _timeout(200)
但仍然没有。它等待大约17-18秒,但我想将其更改为最大值。 1-2sec。
如果你给我一个小费,我会很高兴的。)
答案 0 :(得分:0)
假设您正在使用mbed OS,请将套接字设置为阻塞,并将超时设置为您认为合适的任何内容。无需修改。可以看到方法语法here。
但是,我无法复制您的问题。您是否可以使用调试器并确认应用程序是否挂在此行 - https://github.com/ARMmbed/mbed-os/blob/533e6f0febb5ea582a61f0c8aaf686c70333524f/features/netsocket/TCPSocket.cpp#L57?
答案 1 :(得分:0)
理论上,您也可以尝试将TCP_SYNMAXRTX宏设置为较低的值。它可能会产生一些其他不可预见的后果(我不确定,因为我对LwIP了解不多)。
答案 2 :(得分:0)
首先我需要说的是,TCP_SYNMAXRTX的变化是什么,它真正有用,它帮助了我,但根本没有。在我的情况下,重要的是将mbed OS更改为最新版本。在之前的库中有套接字设置,但实际上它们工作正常,因为mbed OS包含EthernetInterface和其他库(你不应该将它作为外部库导入)。
感谢您的时间和善意! :)