70,020
社区成员




int listenfd = listen_socket(ip.s_addr,100);
if(-1 == listenfd)
{
print_error_location();
return -1;
}
//print addr
struct sockaddr_in addr;
socklen_t addrlen = sizeof(addr);
bzero(&addr,addrlen);
if(-1 == getsockname(listenfd,(struct sockaddr*)&addr,&addrlen))
{
print_error_location();
return -1;
}
printf("ip addr is :%s,port:%d\n",inet_ntoa(addr.sin_addr),ntohs(addr.sin_port));
//accept a connect requset
while(1)
{
int acceptfd = accept(listenfd,NULL,NULL);//acceptfd的值老为-1,这是为啥?
//如果是listenfd的值无效,那上面的getsockname为什么会调用成功?
if(-1 == acceptfd)
{
print_error_location();
perror("accept wrong!\n");
continue;
}
//create a thread to recv file from client
pthread_t tid;
PAR_TO_THREAD *p = (PAR_TO_THREAD*)malloc(sizeof(PAR_TO_THREAD));
int err = pthread_create(&tid,NULL,file_recv,(void*)p);
if(0 != err)
{
perror("create thread faild\n");
continue;
}
}
//另一文件中
#include "mysocket.h"
int listen_socket(in_addr_t ip,int backlog)
{
int listenfd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == listenfd)
{
print_error_location();
perror("tcpServerSocket: create socket error!");
return -1;
}
//bind ip,let sys choose a port for us.
struct sockaddr_in addr;
bzero(&addr,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = ip;
if(-1 == bind(listenfd,(struct sockaddr*)&addr,sizeof(addr)))
//listen...
if(listen(listenfd,backlog) == -1)
{
print_error_location();
perror("tcpServerSocket: listen error");
return -1;
}
return listenfd;
}
if(-1 == bind(listenfd,(struct sockaddr*)&addr,sizeof(addr)))
//listen...原来是我不小心把if(-1==bind(...))的处理代码给删掉了,悲剧啊,浪费我一下午
if(listen(listenfd,backlog) == -1)
{
print_error_location();
perror("tcpServerSocket: listen error");
return -1;
}