Unix C Socket长连接的问题
以下是我server程序
int main(int argc, char **argv)
{
while(1)
{
printf( "restart\n ");
int serverSocket,clientConnection;
struct sockaddr_in serverAddr,clientAddr;
int iRet,iClinetAddrLen;
if((serverSocket = socket(AF_INET,SOCK_STREAM,0)) == -1)
{
printf( "Create Socket Error!\n ");
continue;
}
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(PORT);
if(bind(serverSocket,(struct sockaddr *)&serverAddr,sizeof(serverAddr)) == -1)
{
printf( "Bind Error!\n ");
continue;
}
if(listen(serverSocket,MAXCON) != 0)
{
printf( "Listen Error!\n ");
close(serverSocket);
continue;
}
iClinetAddrLen = sizeof(clientAddr);
clientConnection = accept(serverSocket,(struct sockaddr *)&clientAddr,&iClinetAddrLen) ;
struct timeval timeout = {100,0};
while(1)
{
if (clientConnection < 0 )
{
printf( "Connect Failed.Please try again!\n ");
break;
}
fd_set r;
FD_ZERO(&r);
FD_SET(clientConnection, &r);
int iRet = select(clientConnection+1,&r,NULL,NULL,&timeout);
if(iRet <= 0)
{
break;
}
else
{
if (FD_ISSET(clientConnection,&r))
{
char recvBuf[2048];
char sendBuf[2048];
int len;
memset(recvBuf,0,sizeof(recvBuf));
memset(sendBuf, ' ',sizeof(sendBuf));
len = recv(clientConnection,recvBuf,sizeof(recvBuf),0);
if(len > 0)
{
//处理数据
}
}
}
}
}
close(serverSocket );
}
当客户端断开后,无法重新连接上服务器.我知道是因为accept的client是原来的client,端口后无法获得这个client且没有释放,所以一直无法获得他发的包,所以进入了死循环,请问如何改进这个程序呢?谢谢
[解决办法]
if (FD_ISSET(clientConnection,&r))
{
char recvBuf[2048];
char sendBuf[2048];
int len;
memset(recvBuf,0,sizeof(recvBuf));
memset(sendBuf, ' ',sizeof(sendBuf));
len = read(clientConnection,recvBuf,sizeof(recvBuf),0);//这里返回-1 的时候关闭socket
if(len > 0)
{
//处理数据
}
}