C “怎么可能?”;接受;为传入套接字提供了错误的IP地址?
我的一个套接字出现了问题,它的ip地址似乎有误。 具体来说,它从一个IP接收数据,但将数据发送到另一个IP。 运行代码的相关部分如下所示:C “怎么可能?”;接受;为传入套接字提供了错误的IP地址?,c,linux,sockets,tcp,C,Linux,Sockets,Tcp,我的一个套接字出现了问题,它的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) {
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地址
另外,这是在linux Ubuntu12.04下运行的。address.sin\u addr.S\u addr中的ip地址是按网络字节顺序排列的——在将其分配给connect->IPConnect->ip之前,您可能必须将其转换为主机顺序,这严格用于报告目的,请注意,它不会传递给失败的ssl\u accept子例程(无响应)。它只是为了提供信息(尽管将此输出与tcpdump进行比较确实需要一些算术转换)。