微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重用UDP中的端口号

在ASIO中,是否可以创build与另一个套接字具有相同源端口的另一个套接字?

我的UDP服务器应用程序正在使用端口3000调用receive_from。它将数据包传递给将发送响应的工作线程(当前使用dynamic源端口)。

一个线程中的套接字是这样创build的:

udp::socket sock2(io_service,udp::endpoint(udp::v4(),0));

并使用保存在原始数据包中的sender_endpoint响应原始请求。

你如何将sockaddr结构转换为sockaddr_in – C ++networking套接字ubuntu UDP

用于Linux(和Windows)的Async C ++通信库

在winsock中的FD_CLOSE事件

我可以禁用单个应用程序的TCP窗口缩放吗?

套接字C / C ++上发送float值

我希望能够做的是响应客户端使用相同的源端口作为服务器正在监听。 但我看不出如何做到这一点。 如果我试着说地址在使用,我会得到一个exception。 是否有可能做我在问什么? 我想这样做的原因是,如果我使用dynamic端口,这意味着客户端需要在Windows中添加特殊的防火墙规则,以允许读取回复数据包。 我发现如果源端口在回复中是一样的,那么windows防火墙将允许它回传。

Python 3.2.3:套接字需要更长的时间比它应该?

如何在Linux中使用Perl中的fcgi的unix域套接字的抽象名称

获取具有到给定主机路由的接口的IP地址

SocketoutputStream的线程安全性

poll()在input数据时调用0超时

您应该能够使用SO_REUSEADDR套接字选项将多个套接字绑定到相同的地址。 但话虽如此,你不想这样做,因为它没有指定哪个套接字将在该端口上接收传入的数据(你将不得不检查所有套接字的传入数据)

更好的选择是使用相同的套接字来发送回复 – 这可以安全地从多个线程完成,而无需任何额外的同步(就像使用UDP一样)。

异常告诉你,你不能创建两个具有相同源端口的活套接字。 我不知道ASIO,但你应该能够在脱离线程前创建套接字,并保持对套接字和线程的引用以供以后使用,并且一旦数据发送线程空闲,就返回它并发送其他的东西。

编辑:有一点点的努力,你也可以使一个套接字,你不必等待,直到从一个线程的整个数据已经发送:有一个工作线程拥有该套接字监听队列中的数据块(理想情况下,您打算发送的有效负载的大小),并从多个线程向此队列发送任意有效负载块。

回复发送给同一个套接字(您接收到客户端的请求),而不是创建新套接字,但要确保不会同时从两个线程发送到同一套接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐