Linux下TCP SOCKET编程问题

服务端的代码:
socklen_t clilen;
struct sockaddr_in servaddr,cliaddr;
要是换一下顺序变成:
struct sockaddr_in servaddr,cliaddr;
socklen_t clilen;

更换顺序后,运行的时候并不能与客户端进行正常通信,求解求解~

1.有客户端开多线程对服务器进行连接断开压力测试,在连接接近4000次时,再也连接不上服务器,过了段时间后恢复正常,而后再出现,如此往复.使用Prcess Explorer查看System Idle Process发现大量的TIME_WAIT状态下的Socket.
解析如下:
TCP TIME-WAIT 延迟断开TCP 连接时,套接字对被置于一种称为TIME-WAIT 的状态。这......
答案就在这里:TCP Socket编程的几点肮脏的问题
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

http://blog.csdn.net/leo115/article/details/8044795

只是变量的声明而已,我觉得不可能,你把服务端代码贴上来

服务端代码:
#include

#include
#include
#include
#include
#include
#include

void huishe(int sockfd);

int main(int argc,char **argv)
{
int listenfd,connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in servaddr,cliaddr;

if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
    perror("socket error\n");
    exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(9887);
if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
{
    perror("bind error\n");
    exit(2);
}
if(listen(listenfd,5)<0)
{
    perror("listen error\n");
    exit(3);
}
for(;;)
{
    clilen=sizeof(cliaddr);
    if((connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen))<0)
    {
        perror("accept error");
        exit(4);
    }
    if((childpid=fork())==0)    //child process
    {
        if(close(listenfd)<0)
        {
            perror("close listenfd error");
            exit(5);
        }
        huishe(connfd);
        exit(0);
    }
    if(close(connfd)<0)   //parent close connfd
    {
        perror("close connfd error");
        exit(6);
    }
}

exit(0);

}

void huishe(int sockfd)
{
char buf[4096];
ssize_t n;
while((n=read(sockfd,buf,4096))>0)
printf("client:%s\n",buf);

}

 #include <stdio.h>                                                      
#include <stdlib.h>
#include <strings.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>

void huishe(int sockfd);

int main(int argc,char **argv)
{
    int listenfd,connfd;
    pid_t childpid;
    socklen_t clilen;
    struct sockaddr_in servaddr,cliaddr;

    if((listenfd=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        perror("socket error\n");
        exit(1);
    }
    bzero(&servaddr,sizeof(servaddr));
    servaddr.sin_family=AF_INET;
    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
    servaddr.sin_port=htons(9887);
    if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
    {
        perror("bind error\n");
        exit(2);
    }
    if(listen(listenfd,5)<0)
    {
        perror("listen error\n");
        exit(3);
    }
    for(;;)
    {
        clilen=sizeof(cliaddr);
        if((connfd=accept(listenfd,(struct sockaddr*)&cliaddr,&clilen))<0)
        {
            perror("accept error");
            exit(4);
        }
        if((childpid=fork())==0)    //child process
        {
            if(close(listenfd)<0)
            {
                perror("close listenfd error");
                exit(5);
            }
            huishe(connfd);
            exit(0);
        }
        if(close(connfd)<0)   //parent close connfd
        {
            perror("close connfd error");
            exit(6);
        }
    }

    exit(0);
}


void huishe(int sockfd)
{
    char buf[4096];
    ssize_t n;
    while((n=read(sockfd,buf,4096))>0)
    printf("client:%s\n",buf);

}

发了三次代码才弄好~发现没法删除评论啊

出现的问题详细描述一下,是不是由于之前的端口还处于绑定状态?