我需要获取(客户端)套接字使用的本地端口。
据我了解,Windows Sockets 执行隐式绑定(bind)函数调用
,因此 sendto()
之后的 getsockname()
应提供分配的港口。但是,它始终将端口号设置为 0。我错过了什么吗?
例如:
if (sendto(sockfd, ...) != SOCKET_ERROR)
printf("Sent\n");
if (getsockname(sockfd, (struct sockaddr*)&sin, &sinlen) != SOCKET_ERROR)
printf("port = %u\n", ntohs(sin.sin_port);
else
printf("Error");
//result: Sent, port = 0
最佳答案
重新启动计算机即可解决问题。仍不清楚实际原因,但目前我很高兴它能正常工作。
如果有人有无需重新启动即可解决问题的想法(对于 future 的读者),请随时发帖。
关于c - 获取Socket使用的本地端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597111/