0

环境:操作系统:centos 服务器:apache 2.2.22

问题是服务器无法完成三次握手。客户端可以接收到SYN-ACK包和响应ACK,但是服务端收不到。

客户端代码:

int main() {

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;

}

执行客户端后,使用'netstat -natp',发现连接套接字是SYN_RECV状态。如果使用wireshark抓包,我发现客户端多次重新发送ACK。为什么?

4

1 回答 1

0

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

因为 apache 2.1.5 默认使用 TCP_DEFER_ACCEPT;

于 2013-03-15T05:39:20.557 回答