红联Linux门户
Linux帮助

tcp关闭问题

发布时间:2009-07-17 13:02:49来源:红联作者:forlinux0518
}else if(FD_ISSET(whitelist_servfd,&tempset)){
socklen_t clilen = sizeof(cli_addr);
memset(&cli_addr,0x0,clilen);
syslog(LOG_DEBUG,"connfd tcp accept ");
if((connfd = accept(whitelist_servfd,(struct sockaddr*)&cli_addr,&clilen))<0){
if(errno == EINTR)
continue;
else{
syslog(LOG_DEBUG,"connfd tcp accept error");
}
}
FD_SET(connfd,&allset);
if(connfd > maxfd)
maxfd = connfd;
}else if(FD_ISSET(connfd,&tempset)){
char white[1024];
memset(white,0x0,1024);
syslog(LOG_DEBUG,"connfd tcp accept succ[%d]",connfd);
if ((len = recv(connfd,white,1024,0)) == -1) {
syslog(LOG_DEBUG,"recv whitelist or encrecy file error");
continue;
}else if(len == 0){
syslog(LOG_DEBUG,"close connfd[%d]",connfd);
/*remote close socket*/
close(connfd);
FD_CLR(connfd,&allset);
connfd =0;
}else{
外层 是一循环监听,select;大家帮忙看看这段代码是不是有什么问题 ,有的时候竟然收不到数据,但可以收到被动关闭时候的0,同样的程序有的机器就可以,有的不可以,希望大家对TCP关闭问题能进行讨论下,实时关注~谢谢
文章评论

共有 2 条评论

  1. forlinux0518 于 2009-07-17 16:40:16发表:

    问题基本上解决了,但是会有TIME_WAIT状态,在关闭时候丢失最后的ACK分节,还是想尽力避免这个问题,我用消息队列实现了此功能,但是还希望有人能一起讨论网络编程~

  2. aoxiao007 于 2009-07-17 14:56:52发表:

    楼下的高手请解答,我在旁边关注!!