免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3447 | 回复: 7
打印 上一主题 下一主题

[C] c多线程的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-11-29 23:11 |只看该作者 |倒序浏览
本帖最后由 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)在路由器处:
  1. void in2out()
  2. {
  3.         while(1)
  4.         {
  5.                 recv(socket_in, data)
  6.                 send(socket_out,data)
  7.         }
  8. }
复制代码

==============
外网 --> 内网:
==============

1)外网发数据
2)在路由器处:
  1. void out2in()
  2. {
  3.         while(1)
  4.         {
  5.                 recv(socket_out, data)
  6.                 send(socket_in,data)
  7.         }
  8. }
复制代码

==================
之前的做法:
==================

  1. void in_and_out()
  2. {
  3.         while(1)
  4.         {
  5.                 recv(socket_in, data)
  6.                 send(socket_out,data)
  7.                 .................
  8.                 .................
  9.                 recv(socket_out, data)
  10.                 send(socket_in,data)
  11.         }
  12. }
复制代码
其中 socket_in 设置成“非阻塞”
结果发现,tcp三次握手没成功,原因是延时即,
内网 --> 外网:SYN(成功)
内网 <-- 外网:SYN-ACK(成功)
内网 --> 外网:ACK(失败,发RST报文)

=======================
之后改为多线程的做法:
=======================

  1. void in_out_main()
  2. {
  3.         pthread_create(&pid1, NULL, in2out, NULL)
  4.   
  5.         pthread_create(&pid2, NULL, out2in, NULL)
  6.   
  7.         while(1)
  8.         {}
  9. }
复制代码
但似乎延时问题还是没变,且程序会非正常退出,没提示退出原因,但屏幕会显示跟 多线程lib相关的信息,估计是多线程没写好..........

各位大师,有什么好招?





论坛徽章:
0
2 [报告]
发表于 2017-11-29 23:25 |只看该作者
................................................................

论坛徽章:
0
3 [报告]
发表于 2017-11-30 12:25 来自手机 |只看该作者
有人知道吗?

论坛徽章:
0
4 [报告]
发表于 2017-12-01 16:13 |只看该作者
没人知道吗?

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
5 [报告]
发表于 2017-12-01 22:20 |只看该作者
问问题的第一要求,你要先把完整的错误信息贴出来,一个字都不要差,一个标点符号都不要差,不要自己瞎理解。

论坛徽章:
0
6 [报告]
发表于 2017-12-03 18:18 |只看该作者
windoze 发表于 2017-12-01 22:20
问问题的第一要求,你要先把完整的错误信息贴出来,一个字都不要差,一个标点符号都不要差,不要自己瞎理解 ...
  1. *** Error in `test_program': free(): invalid next size (fast): 0x00007f9df80008f0 ***
  2. ======= Backtrace: =========
  3. /lib/x86_64-linux-gnu/libc.so.6(+0x7908b)[0x7f9e0608b08b]
  4. /lib/x86_64-linux-gnu/libc.so.6(+0x82c3a)[0x7f9e06094c3a]
  5. /lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f9e06098d2c]
  6. test_program[0x41843f]
  7. ======= Memory map: ========
  8. 00400000-00421000 r-xp 00000000 00:2d 4389001                            /test_dir/test_program
  9. 00620000-00621000 r--p 00020000 00:2d 4389001                            /test_dir/test_program
  10. 00621000-00622000 rw-p 00021000 00:2d 4389001                            /test_dir/test_program
  11. 00622000-00645000 rw-p 00000000 00:00 0
  12. 01a75000-01a96000 rw-p 00000000 00:00 0                                  [heap]
  13. 7f9df8000000-7f9df8021000 rw-p 00000000 00:00 0
  14. 7f9df8021000-7f9dfc000000 ---p 00000000 00:00 0
  15. 7f9e00000000-7f9e00021000 rw-p 00000000 00:00 0
  16. 7f9e00021000-7f9e04000000 ---p 00000000 00:00 0
  17. 7f9e04bdb000-7f9e04bf1000 r-xp 00000000 08:07 4461127                    /lib/x86_64-linux-gnu/libgcc_s.so.1
  18. 7f9e04bf1000-7f9e04df0000 ---p 00016000 08:07 4461127                    /lib/x86_64-linux-gnu/libgcc_s.so.1
  19. 7f9e04df0000-7f9e04df1000 r--p 00015000 08:07 4461127                    /lib/x86_64-linux-gnu/libgcc_s.so.1
  20. 7f9e04df1000-7f9e04df2000 rw-p 00016000 08:07 4461127                    /lib/x86_64-linux-gnu/libgcc_s.so.1
  21. 7f9e04df2000-7f9e04df3000 ---p 00000000 00:00 0
  22. 7f9e04df3000-7f9e055f3000 rw-p 00000000 00:00 0
  23. 7f9e055f3000-7f9e055f4000 ---p 00000000 00:00 0
  24. 7f9e055f4000-7f9e05df4000 rw-p 00000000 00:00 0
  25. 7f9e05df4000-7f9e05e0c000 r-xp 00000000 08:07 4470751                    /lib/x86_64-linux-gnu/libpthread-2.24.so
  26. 7f9e05e0c000-7f9e0600c000 ---p 00018000 08:07 4470751                    /lib/x86_64-linux-gnu/libpthread-2.24.so
  27. 7f9e0600c000-7f9e0600d000 r--p 00018000 08:07 4470751                    /lib/x86_64-linux-gnu/libpthread-2.24.so
  28. 7f9e0600d000-7f9e0600e000 rw-p 00019000 08:07 4470751                    /lib/x86_64-linux-gnu/libpthread-2.24.so
  29. 7f9e0600e000-7f9e06012000 rw-p 00000000 00:00 0
  30. 7f9e06012000-7f9e061d0000 r-xp 00000000 08:07 4470736                    /lib/x86_64-linux-gnu/libc-2.24.so
  31. 7f9e061d0000-7f9e063cf000 ---p 001be000 08:07 4470736                    /lib/x86_64-linux-gnu/libc-2.24.so
  32. 7f9e063cf000-7f9e063d3000 r--p 001bd000 08:07 4470736                    /lib/x86_64-linux-gnu/libc-2.24.so
  33. 7f9e063d3000-7f9e063d5000 rw-p 001c1000 08:07 4470736                    /lib/x86_64-linux-gnu/libc-2.24.so
  34. 7f9e063d5000-7f9e063d9000 rw-p 00000000 00:00 0
  35. 7f9e063d9000-7f9e063ff000 r-xp 00000000 08:07 4457987                    /lib/x86_64-linux-gnu/ld-2.24.so
  36. 7f9e065de000-7f9e065e0000 rw-p 00000000 00:00 0
  37. 7f9e065fa000-7f9e065fe000 rw-p 00000000 00:00 0
  38. 7f9e065fe000-7f9e065ff000 r--p 00025000 08:07 4457987                    /lib/x86_64-linux-gnu/ld-2.24.so
  39. 7f9e065ff000-7f9e06600000 rw-p 00026000 08:07 4457987                    /lib/x86_64-linux-gnu/ld-2.24.so
  40. 7f9e06600000-7f9e06601000 rw-p 00000000 00:00 0
  41. 7fff25730000-7fff25751000 rw-p 00000000 00:00 0                          [stack]
  42. 7fff2576d000-7fff2576f000 r--p 00000000 00:00 0                          [vvar]
  43. 7fff2576f000-7fff25771000 r-xp 00000000 00:00 0                          [vdso]
  44. ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
  45. ./run.sh: 行 7: 19722 已放弃               (核心已转储) sudo test_program
复制代码


论坛徽章:
0
7 [报告]
发表于 2017-12-04 15:21 来自手机 |只看该作者
有人知道吗?

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
8 [报告]
发表于 2017-12-06 03:19 |只看该作者
回复 6# kdx_test

但屏幕会显示跟 多线程lib相关的信息
我没看到这段错误信息哪里跟“多线程lib”相关了。
*** Error in `test_program': free(): invalid next size (fast): 0x00007f9df80008f0 ***

显然就是你的程序把heap搞乱了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP