当前位置: 技术问答>linux和unix
linux下socket长连接问题
来源: 互联网 发布时间:2015-09-10
本文导语: server源码如下: ...; bind(..); if(listen(socketfd, 20) == -1) { perror("Error call to listen"); exit(1); } while(1) { SocketCmppFd = accept(socketfd, (struct sockaddr *)&pin, &address_size); if(SocketCmppFd == -1) { printf("Call to accept errorn"); exi...
server源码如下:
...;
bind(..);
if(listen(socketfd, 20) == -1)
{
perror("Error call to listen");
exit(1);
}
while(1)
{
SocketCmppFd = accept(socketfd, (struct sockaddr *)&pin, &address_size);
if(SocketCmppFd == -1)
{
printf("Call to accept errorn");
exit(1);
}
FD_ZERO(&sockfd);
FD_SET(SocketCmppFd, &sockfd);
switch(select(SocketCmppFd + 1, &sockfd, NULL, NULL, NULL))
{
case -1:
perror("error handledn");
break;
case 0:
perror("timeout hanledn");
break;
default:
if(FD_ISSET(SocketCmppFd, &sockfd))
....;
}
}
}
客户端不停发数据,可是select()总是返回-1,如果把accept()去掉就可以正常接收数据,但是如果客户端断掉,就无法再重联了。
我觉得问题就在accept和select的关系上,感觉上边的程序有问题,怪怪的,只是不知道问题出在哪里。
accept到底有什么用处,好像跟select有些重复似的。
...;
bind(..);
if(listen(socketfd, 20) == -1)
{
perror("Error call to listen");
exit(1);
}
while(1)
{
SocketCmppFd = accept(socketfd, (struct sockaddr *)&pin, &address_size);
if(SocketCmppFd == -1)
{
printf("Call to accept errorn");
exit(1);
}
FD_ZERO(&sockfd);
FD_SET(SocketCmppFd, &sockfd);
switch(select(SocketCmppFd + 1, &sockfd, NULL, NULL, NULL))
{
case -1:
perror("error handledn");
break;
case 0:
perror("timeout hanledn");
break;
default:
if(FD_ISSET(SocketCmppFd, &sockfd))
....;
}
}
}
客户端不停发数据,可是select()总是返回-1,如果把accept()去掉就可以正常接收数据,但是如果客户端断掉,就无法再重联了。
我觉得问题就在accept和select的关系上,感觉上边的程序有问题,怪怪的,只是不知道问题出在哪里。
accept到底有什么用处,好像跟select有些重复似的。
|
这程序,结构有问题
SocketCmppFd[num++] = accept(socketfd...);
while(1) {
FD_ZERO(&sockfd);
for(i=0; i
SocketCmppFd[num++] = accept(socketfd...);
while(1) {
FD_ZERO(&sockfd);
for(i=0; i