【发布时间】:2025-11-22 00:50:02
【问题描述】:
我知道这个问题已经被问过了,但我似乎有点“特别”,因为我的代码不起作用。 指令是“与端口 0 绑定并使用getsockname 获取端口”。我做错了什么...
struct sockaddr_in sa;
sa.sin_port=htons(0);
sa.sin_addr.s_addr=htonl(INADDR_ANY);
sa.sin_family=AF_INET;
int sock;
sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr *serverptr = (struct sockaddr*)&sa;
bind(sock, serverptr,sizeof(sa));
socklen_t s=sizeof(sa);
int g=getsockname(sock,serverptr,&s);
g 总是打印为 0。
编辑:它非常简单,只是 sa.sin_port 愚蠢的问题。
【问题讨论】:
-
g 总是打印为 0。 - 你读过
getsockname文档吗?它明确指出“成功时返回零。出错时返回-1,并适当设置errno。”