我遇到了一个看起来错误的ip地址的套接字。 具体来说,它从一个IP接收数据,但是将数据发送到不同的IP。 运行代码的相关部分如下:
struct sockaddr_in address;
socklen_t length = sizeof(address);
int FileHandle = accept(listen_sock->socket, (struct sockaddr*) &address, &length);
if (conn == -1) {
printf("accept failed\n");
return;
}
struct socket_data * connect = malloc(sizeof(struct uid_sock_data));
connect->socket = FileHandle;
connect->IP = address.sin_addr.s_addr;
if (!(connect->ssl = ssl_accept(SecurityContext, connect->socket))){
printf("security handshake failed to ip:%d\n", connect->IP);
close(connect->socket);
free(connect);
return;
}
printf("Success\n");
tcpdump显示一个tcp数据包,其中二进制数据来自一个IP地址,确认数据包(无数据)传出到同一个IP地址。然后看到带有SSL证书数据的数据包到达不同的IP地址(该数据包未被确认),并且打印出“安全握手失败”消息,显示第二个IP地址,没有收到任何请求。
第二个IP地址属于最后一个成功连接的客户端,但那是在12个小时之前,并且该计算机现在甚至没有打开。该软件在此之前正常运行了三天。关于我应该寻找什么的任何建议?如何“接受”给我错误的IP地址?!?
P.S。这是在Linux Ubuntu 12.04下运行。