LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1587|回复: 7

socket性能测试程序参考代码

[复制链接]
发表于 2009-11-3 10:01:41 | 显示全部楼层 |阅读模式
这个程序没有经过严格的测试,我在运行时,会遇到 Segmentation fault 的错误,但是我并没有太多的时间来处理这个问题,此代码仅提供一个测试程序的编写思路。
希望有能力的朋友对此代码进行修正。
[PHP]#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#define MAXDATASIZE 1000
void *thread(void* test)
{
int sockfd,numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr;
unsigned int myport;
int i;
myport = 80;
for(i=0;i<1000;i++){
if((he=gethostbyname("192.168.1.121"))==NULL){
perror("gethostbyname");
exit(1);
}
if((sockfd = socket(PF_INET,SOCK_STREAM,0)) == -1){
perror("socket");
exit(1);
}
their_addr.sin_family=PF_INET;
their_addr.sin_port=htons(myport);
their_addr.sin_addr=*((struct in_addr *)he->h_addr);//here is different with RHEL
bzero(&(their_addr.sin_zero),0);
if(connect(sockfd,(struct sockaddr *)&their_addr,sizeof(struct sockaddr)) == -1){
perror("connect");
exit(1);
}
//printf("test %d",i);
char requestheader[1024];
memset(requestheader,'\0',1024);
strcat(requestheader,"GET /\r\n");
if((numbytes=send(sockfd,requestheader,MAXDATASIZE,0)) == -1){
perror("send");
exit(1);
}
numbytes=0;
if((numbytes=recv(sockfd,buf,MAXDATASIZE,0)) ==-1){
perror("recv");
exit(1);
}
buf[numbytes]=0;
printf("Received: %s \n thread %d\r\n",buf,i);
close(sockfd);
}
}
int main(void)
{
pthread_t id;
int i,ret;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
for(i=0;i<=500;i++){
ret=pthread_create(&id,&attr,thread,NULL);
printf("this is %d\r\n",i);
if(ret!=0){
printf("Create pthread error!\n");
exit(1);
}
}
return 0;
}[/PHP]
发表于 2009-11-3 11:56:24 | 显示全部楼层
楼主啥意思?
回复 支持 反对

使用道具 举报

发表于 2009-11-3 16:18:54 | 显示全部楼层
Segmentation fault 应该是因为你的程序里面没有malloc类似的函数?
回复 支持 反对

使用道具 举报

发表于 2009-11-3 20:12:42 | 显示全部楼层
依稀记得,linux里的segment fault错误大多都是因为非法内存访问引起的。楼主叫别人来给你调试代码太不厚道!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-3 21:09:37 | 显示全部楼层
这个程序在开发板上面运行没有任何问题 20进程一下
在进程超过25个的时候 会出问题

出错原因可能是描述符不够用造成的
回复 支持 反对

使用道具 举报

发表于 2009-11-4 21:00:42 | 显示全部楼层
Post by haohao_h;2042342
依稀记得,linux里的segment fault错误大多都是因为非法内存访问引起的。楼主叫别人来给你调试代码太不厚道!


同意。。我也是这个看法。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-4 21:25:07 | 显示全部楼层
楼主不厚道:yun:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 11:23:42 | 显示全部楼层
Post by hellolfs;2042266
Segmentation fault 应该是因为你的程序里面没有malloc类似的函数?

char buf[MAXDATASIZE];
char requestheader[1024];
memset(requestheader,'\0',1024);
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表