- 论坛徽章:
- 0
|
本帖最后由 kdx_test 于 2017-11-29 23:22 编辑
最近碰到个问题,如下:
做路由器转发,2个网卡,打算使用2个socket(socket_in, socket_out,2个socket都在路由器处,对应2个网卡),即下面蓝色部分都是在路由器里的处理:
内网 --> socket_in --> 收到数据 --> socket_out --> 外网
内网 <-- socket_in <-- 收到数据 <-- socket_out <-- 外网
=============
内网 --> 外网:
=============
1)内网发数据
2)在路由器处:
- void in2out()
- {
- while(1)
- {
- recv(socket_in, data)
- send(socket_out,data)
- }
- }
复制代码
==============
外网 --> 内网:
==============
1)外网发数据
2)在路由器处:
- void out2in()
- {
- while(1)
- {
- recv(socket_out, data)
- send(socket_in,data)
- }
- }
复制代码
==================
之前的做法:
==================
- void in_and_out()
- {
- while(1)
- {
- recv(socket_in, data)
- send(socket_out,data)
- .................
- .................
- recv(socket_out, data)
- send(socket_in,data)
- }
- }
复制代码 其中 socket_in 设置成“非阻塞”
结果发现,tcp三次握手没成功,原因是延时即,
内网 --> 外网:SYN(成功)
内网 <-- 外网:SYN-ACK(成功)
内网 --> 外网:ACK(失败,发RST报文)
=======================
之后改为多线程的做法:
=======================
- void in_out_main()
- {
- pthread_create(&pid1, NULL, in2out, NULL)
-
- pthread_create(&pid2, NULL, out2in, NULL)
-
- while(1)
- {}
- }
复制代码 但似乎延时问题还是没变,且程序会非正常退出,没提示退出原因,但屏幕会显示跟 多线程lib相关的信息,估计是多线程没写好..........
各位大师,有什么好招?
|
|