我想更改套接字正在侦听的端口。问题是,只要对accept()的调用仍在进行中,我就无法做到。我试图关闭套接字,期望accept()退出并返回负值。但它在FreeRTOS上并没有发生。当我从不同的线程关闭套接字时,accept()仍然执行。我想出的唯一解决方法是在变量中设置一个标志,建立一个TCP连接,然后当accept()完成时,检查标志,bind()与新端口nad调用listen()。但也许有更优雅的方法?
答案 0 :(得分:2)
我想更改套接字正在侦听的端口。
你不能。您必须关闭当前的侦听套接字,然后打开一个新的侦听套接字。
问题在于,只要对accept()的调用仍在进行中,我就无法做到。
您必须首先取消阻止accept()
,然后才能关闭侦听套接字。
我试过关闭套接字
这是实现该要求的正确方法,但它并不构成更改套接字正在侦听的端口。您必须创建一个侦听新端口的新套接字。
我会创建新套接字并使其运行并设置一个标志,表示不接受旧套接字上的任何进一步连接:当旧套接字上的accept()
最终解除阻塞时,检查标志,如果它& #39; s set然后关闭接受的连接和旧的侦听套接字并退出接受循环和线程。
这是一个奇怪的要求。目的是什么?