免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: pandaiam
打印 上一主题 下一主题

[C] 自己写的socket 程序有个小问题,求助一下[已经解决,与socket无关] [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-03-29 11:04 |只看该作者
加个sleep试试

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
12 [报告]
发表于 2011-03-29 11:14 |只看该作者
  1.         for (j = 0; j < atoi(argv[1]); j++) {
  2.                 if ( (ipid = fork()) < 0) {
  3.                         printf("fork error.\n");
  4.                         return -2;
  5.                 } else if (ipid == 0) {
  6.                         /* child */

  7.                         for (i = 0; i < atoi(argv[2]); i++) {
  8.                                 /* data */

  9.                                 int rand_arg;
  10.                                

  11.                                 struct TComm send_t;

  12.                                 rand_arg = getpid();
  13.                                 printf("[%d]", rand_arg);

  14.                                 printf("[i%d]\t", i);
  15.                                
  16.                                 rand_arg += i;
  17.                                
  18.                                 /* socket */
  19.                                 if ( (sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)  {
  20.                                         write(1,"socket error.\n", 16);
  21.                                         exit(-3);
  22.                                 }
  23.                                 bzero(&servaddr, sizeof(servaddr));
  24.                                 servaddr.sin_family = AF_INET;
  25.                                 servaddr.sin_port = htons(8888);
  26.                                 if (inet_pton(AF_INET, "192.168.0.1", &servaddr.sin_addr) <= 0) {
  27.                                         write(1, "1\n", 3);
  28.                                         exit(-3);
  29.                                 }
  30.                                 if (connect(sock_fd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) {
  31.                                         write(1, "c2\n", 4);
  32.                                         exit(-3);
  33.                                 }                       

  34.                                 create_sendt(&send_t,rand_arg); /* 生成发送报文 */
  35.                                 printf("create_sendt\t");
  36.                                
  37.                                 /* send */
  38.                                 if ( write(sock_fd, &send_t, sizeof(struct TComm)) != sizeof(struct TComm)) {
  39.                                         write(1, "w4\n", 4);
  40.                                         exit(-3);
  41.                                 }
  42.                                
  43.                                 /* recv */
  44.                                 if ( read(sock_fd, &send_t, sizeof(struct TComm)) != sizeof(struct TComm)) {
  45.                                         write(1, "r5\n", 5);
  46.                                         exit(-3);
  47.                                 }

  48.                                 printf("cardno[%s]\tret_code[%s]\n", send_t.sSCardNo, send_t.sRetCode);
  49.                                 close(sock_fd);
  50.                         }

  51.                         exit(0);
  52.                 }
  53.         }
复制代码

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
13 [报告]
发表于 2011-03-29 11:15 |只看该作者
我试了下, 加了 sleep 也会出现这种情况。在子进程的for循环里面加的。

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
14 [报告]
发表于 2011-03-29 11:24 |只看该作者
什么情况下进程会无声无息的挂掉啊

除0
写不属于自己的内存

还有别的情况吗?

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
15 [报告]
发表于 2011-03-29 11:26 |只看该作者
有什么工具能捕捉这些错误信息吗?或者系统哪里有写?

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
16 [报告]
发表于 2011-03-29 13:25 |只看该作者
顶一下。

论坛徽章:
0
17 [报告]
发表于 2011-03-29 15:44 |只看该作者
回复 16# pandaiam


   贴出来整个程序 让我帮你调试下........

论坛徽章:
3
巳蛇
日期:2013-10-03 10:41:48申猴
日期:2014-07-29 16:12:04天蝎座
日期:2014-08-21 09:24:52
18 [报告]
发表于 2011-03-29 15:53 |只看该作者
已经找到了,与socket无关。

内存有关的,malloc时少了一次,但是后面用的时候会访问到哪一位。
比如说我要预备10个字符串,然后后面用的时候是随机取一个0到9的数,作为索引来取10个字符串里面的其中一个。现在呢,malloc只有9次,也就是说生成随机数为9的时候,进程就极有可能当掉。

就是这个原因。

谢谢大家。

论坛徽章:
0
19 [报告]
发表于 2011-03-31 16:26 |只看该作者
你可以把代码贴出来,我帮你看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP