gpt4 book ai didi

c - inet_ntop 在第一次使用时返回 0.0.0.0

转载 作者:太空狗 更新时间:2023-10-29 11:14:55 24 4
gpt4 key购买 nike

我正在尝试编写服务器应用程序。我想获得客户的IP。我的问题是 inet_ntop 函数。我无法让它正常工作。这是我的用法:

void client_loop(uint16_t port) {
int cfd;
int socket = bind_socket(port, INADDR_ANY);
char ip[INET_ADDRSTRLEN];
struct sockaddr client_addr;
struct sockaddr_in *addr_in;
socklen_t cli_len;
while (work) {
if ((cfd = TEMP_FAILURE_RETRY(accept(socket, &client_addr, &cli_len))) < 0) {
if (EAGAIN == errno || EWOULDBLOCK == errno)
continue;
ERR("accept");
}
addr_in=(struct sockaddr_in *)&client_addr;
inet_ntop(AF_INET, &(addr_in->sin_addr),ip, sizeof(ip));
printf("INET_NTOP: %s\n",ip);
}
}

inet_ntop 的第一次使用总是返回 0.0.0.0 然后它正常工作。当我将 inet_ntop 移动到外部函数时,它仅适用于来自本地主机的连接。谢谢。

编辑:

已修复。问题是 cli_len 没有初始化,所以 accept 没有填充 client_addr

这条线就像老板一样工作:

socklen_t cli_len=sizeof(struct sockaddr);

最佳答案

我找不到问题,但我看到您已将 cli_len 作为参数,但您必须使用 sizeof(ip) 代替 inet_ntop 的第 4 个参数 (cli_len)。并且在调用 inet_ntop 之前也请检查 cli_len

关于c - inet_ntop 在第一次使用时返回 0.0.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915676/

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