首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

为何在这个socket上accpet出错呢?分数不够,明天加分

2013-04-20 
为什么在这个socket上accpet出错呢?分数不够,明天加分本帖最后由 leigema 于 2013-04-16 19:30:21 编辑我

为什么在这个socket上accpet出错呢?分数不够,明天加分
本帖最后由 leigema 于 2013-04-16 19:30:21 编辑 我先在一个函数中创建一个套接字,并让其处于listen状态。然后返回这个套接字的描述符。
然后在main函数中就直接在这个套接字描述符上accept。这样有什么问题吗?为什么accept老出错。perror输出的信息是参数无效。


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;
}



我单步跟踪的结果表示man函数中的listenfd的值一直没变,为啥就不能在上面accept呢?
输出结果是:
ip addr is :192.168.1.222,port:42733
-->myerror.h,print_error_location,7,accept wrong!
: Invalid argument
socket accept
[解决办法]
唉,总会出现这样的错误。。。lz加油。。。
[解决办法]
这有socket例子,可以参考:
http://download.csdn.net/detail/geoff08zhang/4571358

热点排行