2013-03-13 38 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默認;

相關問題