免费注册 查看新帖 |

Chinaunix

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

11.23 IA64 下C程序的奇怪问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-24 13:47 |只看该作者 |倒序浏览
小弟在一台rx2620上正常编译运行的一段socket程序,移植到相同环境的rx3640上,编译没问题,运行时coredump,用gdb分析core,显示printf的一行出错,信息是收到信号11。用tusc调试,发现程序根本没装载完成就溢出了。但把这个在3640上出错的程序原样rcp到2620上,就没问题。请高手不吝赐教,谢谢。

PS:小弟用HP-UX不久,不太了解看版本、补丁的命令,用uname -a看了一下,
3640:HP-UX zxxg4 B.11.23 U ia64 3336025618 unlimited-user license
2620:HP-UX txxxp B.11.23 U ia64 1823431148 unlimited-user license
不知道这个小版本的差别是否会导致上述的问题,请高人指点。

感激涕零

论坛徽章:
0
2 [报告]
发表于 2007-04-24 15:03 |只看该作者

精简过的程序源码,用cc编译

$ cat cctst.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define MAXDATASIZE 10*2048*2048 /*每次最大数据传输量 */
main(int argc, char **argv)
{
        int sockfd, recvbytes,iconn,portno;
        char buf[MAXDATASIZE],*p;
        struct hostent *host;
        struct sockaddr_in serv_addr;
        if (argc < 2)
        {
                printf(\"Please enter the server\'s hostname!\\n\");
                exit(1);
        }
        if((host=gethostbyname(argv[1]))==NULL)
        {
                printf(\"gethostbyname出错!\\n\");
                exit(1);
        }
        if((portno=atoi(argv[2]))==NULL)
        {
                printf(\"port出错!\\n\");
                exit(1);
        }
        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
                printf(\"socket创建出错!\\n\");
                exit(1);
        }
        serv_addr.sin_family=AF_INET;
        serv_addr.sin_port=htons(portno);
        serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
        bzero(&(serv_addr.sin_zero),8);
CONN:
        if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr
)) == -1)
        {
                printf(\"connect出错!\\n\");
                close(sockfd);
                exit(1);
        }

        iconn=0;
        while(1)
        {
                if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) <=0 )
                {
                        printf(\"recv出错!\\n\");
                        iconn++;
                        if(11==iconn)
                        {
                                close(sockfd);
                                goto CONN;
                        }
                        continue;
                }
                buf[recvbytes] = \'\\0\';

                p=(char *)buf;
                while(*p!=\'\\0\')
                {
                        if(*p==\'\\x0d\')
                                strcpy(p,p+1);
                        p++;
                }
                printf(\"%s\",buf);
                fflush(0);
        }
}
$

论坛徽章:
0
3 [报告]
发表于 2007-04-24 15:09 |只看该作者
cc编译成64位的好像就可以了。奇怪。测试中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP