exosip2-5.1.0 TCP传输方式使用摘录

1、使用TCP发送消息端口随机问题

  问题:使用exosip2 主动发送TCP消息时端口不固定;
代码分析:
  首先exoisp2中TCP方式发送数据的sock有两种来源(eXtl_tcp.c):

《1》、tcp_tl_read_message函数中accept函数返回的socket,最多200个;

在这里插入图片描述
这个是作为服务器被动连接,返回的sock绑定的端口号都是我们用eXosip_listen_addr设置的;

《2》、主动发起TCP连接时新建立的socket;

在这里插入图片描述

在_tcp_tlconnect_socket中创建新的socket但是有一个if判断来决定是否进行端口绑定,判断如下:
[外链图片转存失败(img-sZBtuQMl-1564657065526)(en-resource://database/3076:1)]

如果没有进行端口绑定,就会随机选择一个端口号,这就是问题所在

判断条件中的ai_addr_len设置是在tcp_tl_open中设置,但是有一个宏控制住了,该宏默认是没定义的,如下:
在这里插入图片描述

所以如果把该宏打开我们就能使用我们设置的端口号发送数据了,但是该 宏ENABLE_MAIN_SOCKET的作用并没有提及,所以不知道开启后会有什么影响。eXtl_tls.c中说是阻止不安全的tls连接,感觉和tcp的是没有关系的。
在这里插入图片描述

2、额外设置

  需要将eXtl_tcp.c中的被设置为SO_REUSEADDR 的sock,再在此基础上添加SO_REUSEPORT,不然发送消息的sock创建失败。

setsockopt (sock, SOL_SOCKET, SO_REUSEPORT, (void *) &valopt, sizeof (valopt));

3、结果:

在这里插入图片描述

4、参考

1、SO_REUSEADDR和SO_REUSEPORT作用

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值