2

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

4

1 回答 1

3

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

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

问题是只要调用 accept() 仍在进行中,我就无法做到这一点。

您必须先解除阻塞accept(),然后才能关闭侦听套接字。

我尝试关闭套接字

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

我将创建新套接字并使其投入运行并设置一个标志,表示不接受旧套接字上的任何进一步连接:当accept()旧套接字上最终解除阻塞时,检查该标志,如果已设置则关闭接受的连接和旧的侦听套接字并退出接受循环和线程。

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

于 2014-08-13T19:08:46.527 回答