Linux中select函数及实例,,linux中select函数的有关问题

当前位置:我的异常网» Linux/Unix » ,linux中select函数的有关问题

,linux中select函数的有关问题

www.myexceptions.net  网友分享于:2015-08-26  浏览:11次

请教高手,linux中select函数的问题

最近刚刚学习linux下的socket编程,在实现多客户端通信的时候,服务器端原本用gethostbyname函数可以成功,但是现在想用getAddrinfo函数使得IPv4、IPv6都能用时,select函数无法判断客户端的连接,程序被阻塞在select这一句,不知道哪里出问题了,请教各位高手帮忙解答下,谢拉啊!

Server端程序

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXSIZE 1024

#define MAXSOCKET 3

int count=0;

int get_file;

fd_set readfds;

void *get_client(void *);

using namespace std;

int main(int argc,char *argv[])

{

if(argc<3)

{

cout<

exit(1);

}

int serverSock,confd;

//char *server_file;

struct sockaddr_in addr;

pthread_t thread_test;

socklen_t addr_len=sizeof(addr);

if((serverSock=socket(AF_INET,SOCK_STREAM,0))<0)

{

cout<

exit(1);

}

in_port_t port=atoi(argv[1]);

if((get_file=open("/home/tracy/software/sock_file/test",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR))==-1)

{

cout<

exit(1);

}

// server_file=get_file;

bzero(&addr,sizeof(addr));

addr.sin_family=AF_INET;

addr.sin_port=htons(port);

// addr.sin_port=htons("4000");

addr.sin_addr.s_addr=htonl(INADDR_ANY);

if(bind(serverSock,(struct sockaddr*) &addr,sizeof(addr))<0)

{

cout<

exit(1);

}

if(listen(serverSock,3)<0)

{

cout<

exit(1);

}

while(1)

{

FD_ZERO(&readfds);

FD_SET(serverSock,&readfds);

if(select(MAXSOCKET+1,&readfds,NULL,NULL,0))

{

if(FD_ISSET(serverSock,&readfds)>0)

{

confd=accept(serverSock,(struct sockaddr*)&addr,&addr_len);

count=count+1;

pthread_create(&thread_test,NULL,&get_client,(void*)confd);

}

}

}

}

void *get_client(void *newSock)

{

char buffer[MAXSIZE];

int recv_write;

// char *server_file;

/*if(count<=MAXSOCKET)

{

if(recv((int)newSock,buffer,MAXSIZE,0)<0)

{

cout<

return NULL;

}

cout<

cout<

if(send((int)newSock,"hello,I'm server!",strlen("hello,I'm server!")+1,0)<0)

{

cout<

return NULL;

}

close((int)newSock);

}

else

send((int)newSock,"client full!",strlen("client full!")+1,0);*/

if(count<=MAXSOCKET)

{

while((recv_write=recv((int)newSock,buffer,MAXSIZE,0))!=0)

文章评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值