ZBLOG

eProsima Fast DDS implements TCP transport for both TCPv4 and TCPv6. Each of these transports is independent from the other, and has its own TransportDescriptorInterface. However, they share many of their features, and most of the TransportDescrip...

eProsima Fast DDS 实现了对 TCPv4 和 TCPv6 的支持。以下是有关其传输描述符(TransportDescriptorInterface)的详细解释:

TCP 传输的基本概念

  • 独立性:TCPv4 和 TCPv6 的实现是独立的,各自拥有自己的 TransportDescriptorInterface
  • 共享特性:虽然它们是独立的,但许多功能和数据成员是通用的。

共同的数据成员

以下表格列出了 TCPv4 和 TCPv6 共有的数据成员及其说明:

成员 数据类型 默认值 描述
sendBufferSize uint32_t 0 套接字的发送缓冲区大小(字节)。
receiveBufferSize uint32_t 0 套接字的接收缓冲区大小(字节)。
netmask_filter NetmaskFilterKind AUTO 网络掩码过滤。
allowlist vector<pair<string, NetmaskFilterKind>> 空向量 允许接口列表及其网络掩码过滤配置。
blocklist vector<string> 空向量 被阻止接口列表。
interfaceWhiteList vector<string> 空向量 允许接口列表。
TTL uint8_t 1 生存时间,单位为跳数。
listening_ports vector<uint16_t> 空向量 用作服务器监听的端口列表。如果某个端口设置为0,将自动分配可用端口。
keep_alive_frequency_ms uint32_t 5000 RTCP 保持连接请求的频率(毫秒)。
keep_alive_timeout_ms uint32_t 15000 在发送最后一个保持连接请求后,将连接视为断开的时间(毫秒)。
max_logical_port uint16_t 100 在 RTCP 协商期间尝试的最大逻辑端口数量。
logical_port_range uint16_t 20 每次RTCP协商请求中尝试的最大逻辑端口数量。
logical_port_increment uint16_t ” “ 2” “ “协商期间尝试逻辑端口之间的增量 “
“enable_tcp_nodelay” “ “bool” “ false” “ “启用TCP_NODELAY套接字选项 “
“non_blocking_send” “ “bool” “ false” “ “在发送操作时不阻塞(*) “
“calculate_crc” “ “bool” “ true” “ “如果消息头计算并发送CRC “
“check_crc” “ “bool” “ true” “ “检查进入消息头的CRC “
“apply_security” “ “bool” “ false” “ “使用TLS.参见TLS over TCP “
“tls_config’” ‘ TLSConfig’ “’ ‘TLS配置。见TLS over TCP ‘
‘default_reception_threads’ ‘ ThreadSettings’ ‘ 默认线程设置用于接收线程 ‘
‘reception_threads’ ‘std::map’ ‘ 特定端口上接收线程ThreadSettings ‘
‘keep_alive_thread’ ‘ThreadSettings’ ‘ 保持活动TCP连接执行的线程设置 ‘
‘accept_thread’ ‘ThreadSettings’ ‘ 处理传入TCP连接请求的线程设置 ‘
‘tcp_negotiation_timeout’ ‘uint32_t’ ‘ 0’ ‘ 等待逻辑端口协商时间(以ms为单位)。 如果某个逻辑端口正在协商,则会等到此超时结束,才会尝试向该端口发送消息 . 设置非零值将增加发现时间,设置为零表示不等待,但可能导致丢失第一条消息。”

警告和注意事项

  1. 关于监听端口

    • 尽管成员变量听取多个端口,但实际上只有第一个监听端口会被有效使用,其余将被忽略。
  2. 未配置监听端口

    • 如果未填充 listening_ports,参与者将无法接收传入连接,但仍然能够连接其他已配置监听端口的参与者。
  3. 非阻塞发送行为

    • 当 non_blocking_send 设置为 true 时,如果发送缓冲区可能已满,则发送操作会立即返回,但不会给上层返回错误。这意味着应用程序会认为数据包已成功发送,即使实际上可能已丢失。
    • 当 non_blocking_send 设置为 false 时,发送操作将在网络缓冲区有足够空间之前一直阻塞。

这段信息提供了 eProsima Fast DDS 中使用 TCP 的全面细节,包括可配置参数、默认值以及相关警告和注意事项,使开发者能够根据具体需求灵活配置通信选项。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7207

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?