首页 文章

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

提问于
浏览
1

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

1 回答

  • 2

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

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

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

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

    我试过关闭套接字

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

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

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

相关问题