2013-03-13 45 views
0

环境: 操作系统:CentOS的 服务器:Apache 2.2.22为什么我的服务器的套接字SYN_RECV

的问题是服务器cant't完成三次握手。 客户端可以收到SYN-ACK数据包和响应ACK,但服务器无法获得。

客户机代码:

INT主() {

struct sockaddr_in srvaddr; 
srvaddr.sin_family = AF_INET; 
srvaddr.sin_port = htons(80); 
int32_t sockfd; 
srvaddr.sin_addr.s_addr = inet_addr("10.200.33.201");//httpd ip 
sockfd = socket(AF_INET,SOCK_STREAM,0); 

if(connect(sockfd,(struct sockaddr*) &srvaddr,sizeof(struct sockaddr)) < 0) 
    printf("connect error!\n"); 
//close(sockfd); 

pause(); 
return 0; 

}

EXCUTE客户端之后,使用 'netstat的-natp',找到连接插座是SYN_RECV状态。 如果使用wireshark捕获数据包,我发现客户端重新发送ACK很多次。 为什么?

回答

0

#include int timeout = 1; setsockopt的(listen_fd,IPPROTO_TCP,TCP_DEFER_ACCEPT,&超时的sizeof(int)的)

因为Apache 2.1.5使用TCP_DEFER_ACCEPT默认;

相关问题