- 论坛徽章:
- 0
|
其中服务器端报段错误异常退出,客服端出现errno=111的错误异常退出,请问这是为什么?其中服务器端的listen的listen(int s, int backlog)的backlog值为64,客服端代码为:#include<stdio.h>
#include<errno.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<pthread.h>
#define SERV_PORT 80
#define MAXLINE 1024
#define LOOP 100
void * handle_request_cat(void * ptr_serv_addr)
{
int sockfd,n;
sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serv_addr=*(struct sockaddr_in *)ptr_serv_addr;
char buf[MAXLINE];
extern int errno;
int con=connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
if(con!=0)
{
printf("errno=%d,error:%s\n",errno,strerror(errno));
fputs("connect fail!",stderr);
exit(1);
}
char * str="GET index.html\r\n\r\n";
write(sockfd,str,strlen(str));
while((n=read(sockfd,buf,MAXLINE))!=0)write(STDOUT_FILENO,buf,n);
close(sockfd);
}
void * handle_request_ls(void * ptr_serv_addr)
{
int sockfd,n;
sockfd=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serv_addr=*(struct sockaddr_in *)ptr_serv_addr;
char buf[MAXLINE];
extern int errno;
int con=connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr));
if(con!=0)
{
printf("errno=%d,error:%s\n",errno,strerror(errno));
fputs("connect fail!",stderr);
exit(1);
}
char * str="GET direct\r\n\r\n";
write(sockfd,str,strlen(str));
while((n=read(sockfd,buf,MAXLINE))!=0)write(STDOUT_FILENO,buf,n);
close(sockfd);
}
int main(int argc,char * argv[])
{
struct sockaddr_in serv_addr;
int n,i;
pthread_t attacker;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
bzero(&serv_addr,sizeof(serv_addr));
serv_addr.sin_family=AF_INET;
inet_pton(AF_INET,"127.0.0.1",&serv_addr.sin_addr);
serv_addr.sin_port=htons(SERV_PORT);
for(i=0;i<LOOP;i++)
{
pthread_create(&attacker,&attr,handle_request_cat,&serv_addr);
pthread_create(&attacker,&attr,handle_request_ls,&serv_addr);
}
return 0;
}
|
|