gpt4 book ai didi

c - Unix socket编程如何获取本地IP地址和端口?

转载 作者:太空狗 更新时间:2023-10-29 16:08:44 28 4
gpt4 key购买 nike

我用它作为创建新服务器的地址(socket(), bind(), listen()):

struct sockaddr_in newServer;
memset(&newServer, 0, sizeof(newServer));
newServer.sin_family = AF_INET;
newServer.sin_addr.s_addr = htonl(INADDR_ANY);
newServer.sin_port = htons(UNUSED_PORT);

宏 UNUSED_PORT 定义为 0。

我希望让服务器监听任何接口(interface)和未使用的端口。

我尝试使用 getsockname() 获取我的本地 IP 地址和端口,但我得到了一些奇怪的输出。输出代码如下:

struct sockaddr_in localAddress;
socklen_t addressLength;
getsockname(newServerfd, (struct sockaddr*)&localAddress, \
&addressLength);
printf("local address: %s\n", inet_ntoa( localAddress.sin_addr));
printf("local port: %d\n", (int) ntohs(localAddress.sin_port));

比如我得到0.255.255.255:0、0.0.0.0:0、255.127.0.0:36237等我的系统是 Mac OS X 10.7.3。

--更新--

在使用socklen_t addressLength = sizeof(localAddress);(感谢@cnicutar 和@Jonathan Leffler)之后,本地IP总是0.0.0.0;可以吗?

最佳答案

调用getsockname前需要初始化addressLength:

socklen_t addressLength = sizeof(localAddress);

关于c - Unix socket编程如何获取本地IP地址和端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167540/

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