- 论坛徽章:
- 0
|
struct timespec reg;
struct timeval regm;
reg.tv_sec = 0;
reg.tv_nsec = 500000000;
regm.tv_sec = 10;
regm.tv_usec = 0;
fd_set rset;
sock_descriptor = socket(AF_INET,SOCK_STREAM,0);
if (sock_descriptor == -1){
perror("call to socket" ;
exit(1);
}
bzero(&sin,sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_addr.s_addr = INADDR_ANY;
sin.sin_port = htons(port);
if (bind(sock_descriptor,(struct sockaddr *)&sin,sizeof(sin)) ==-1)
{
perror("call to bind" ;
}
strcat(tbuff,"received ... testing," ;
if (listen(sock_descriptor,1) == -1)
{
perror("call to listen" ;
}
for(; {
FD_ZERO(&rset);
FD_SET(sock_descriptor,&rset);
retval = select(sock_descriptor + 1,&rset,NULL,NULL,&m);
if(retval){
printf ("Accepting connections....\n" ;
if( (temp_sock_descriptor = accept(sock_descriptor,(struct sockaddr *)&pin,&address_size)) == -1){
printf("call to accept" ;
}
while(1){
memset(buff,0,sizeof(buff));
if ((lens = recv(temp_sock_descriptor,buff,sizeof(buff),0)) == -1){
printf("call to recv...\n" ;
break;
}
printf("lens==%d\n",lens);
printf("client from:%s\n",inet_ntoa(pin.sin_addr));
a = buff;
Decode(a,lens);
//nanosleep(&,NULL);
if ((len = send(temp_sock_descriptor,buff,sizeof(buff),0)) == -1){
printf("call to send....\n" ;
break;
}
i++;
}
}else{
printf("no data!\n" ;
break;
}
问了好几次,大家都说用select,但是现在这个问题还是依旧。我这是一对一通讯,但是客户端一关闭,我的这个服务端也跟着关闭。还有就是设置超时,屏幕输出了no data!之后又是关闭,我的break怎么都不能跳出这个for循环,继续监听是否有新的套接字呢?难道要用goto语句?
请大家给点具体的代码指点一下 |
|