调用accept()后如何更改套接字的侦听端口?

时间:2014-08-13 17:59:07

标签: sockets freertos lwip

我想更改套接字正在侦听的端口。问题是,只要对accept()的调用仍在进行中,我就无法做到。我试图关闭套接字,期望accept()退出并返回负值。但它在FreeRTOS上并没有发生。当我从不同的线程关闭套接字时,accept()仍然执行。我想出的唯一解决方法是在变量中设置一个标志,建立一个TCP连接,然后当accept()完成时,检查标志,bind()与新端口nad调用listen()。但也许有更优雅的方法?

1 个答案:

答案 0 :(得分:2)

  

我想更改套接字正在侦听的端口。

你不能。您必须关闭当前的侦听套接字,然后打开一个新的侦听套接字。

  

问题在于,只要对accept()的调用仍在进行中,我就无法做到。

您必须首先取消阻止accept(),然后才能关闭侦听套接字。

  

我试过关闭套接字

这是实现该要求的正确方法,但它并不构成更改套接字正在侦听的端口。您必须创建一个侦听新端口的新套接字。

我会创建新套接字并使其运行并设置一个标志,表示不接受旧套接字上的任何进一步连接:当旧套接字上的accept()最终解除阻塞时,检查标志,如果它& #39; s set然后关闭接受的连接和旧的侦听套接字并退出接受循环和线程。

这是一个奇怪的要求。目的是什么?