gpt4 book ai didi

c - 检索获得连接重置的客户端的 IP 地址

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:36 24 4
gpt4 key购买 nike

我有这段代码,当客户端关闭或失去连接时获取客户端的 ip。

char buffer[80]; 
ssize_t bread;
struct sockaddr_in peer;
socklen_t peer_len;

peer_len = sizeof(peer);

memset(&buffer, 0, sizeof(buffer));

bread = read(connectlist[listnum], buffer, 80);
if (bread < 0)
{

if(getpeername(connectlist[listnum],(struct sockaddr *) &peer, &peer_len) == -1){

perror("getpeername() failed");
}
printf("Connection Reset From IP: %s\n", inet_ntoa(peer.sin_addr));

_Print_To_File(inet_ntoa(peer.sin_addr));
close(connectlist[listnum]);
close(connectlist[listnum]);
connectlist[listnum] = 0;

}

if(bread == 0)
{
if(getpeername(connectlist[listnum],(struct sockaddr *) &peer, &peer_len) == -1){
perror("getpeername() failed");
}
printf("Connection Closed From IP: %s\n", inet_ntoa(peer.sin_addr));

_Print_To_File(inet_ntoa(peer.sin_addr));
close(connectlist[listnum]);
connectlist[listnum] = 0;
}

当连接关闭时,我可以获取客户端的 ip,但当连接重置时,我无法获取客户端的 ip。我在连接重置时得到 0.0.0.0。我怎样才能解决这个问题。谢谢,

最佳答案

getpeername() 仅适用于已连接的套接字。一旦套接字断开连接,您将在调用它时收到 ENOTCONN 错误。这就是为什么 getpeername() 有时被用作检查套接字是否已连接/已连接的原因。

关于c - 检索获得连接重置的客户端的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13274315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com