Linux 不带bind()的getsockname()
我正在尝试获取套接字的端口号,而不调用bind()。 代码如下Linux 不带bind()的getsockname(),linux,sockets,network-programming,unix-socket,Linux,Sockets,Network Programming,Unix Socket,我正在尝试获取套接字的端口号,而不调用bind()。 代码如下 #include <arpa/inet.h> #include <unistd.h> #include <cstdio> int main() { int sock = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0); struct sockaddr_in sin; socklen_t len = sizeof(sin); if (get
#include <arpa/inet.h>
#include <unistd.h>
#include <cstdio>
int main() {
int sock = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
struct sockaddr_in sin;
socklen_t len = sizeof(sin);
if (getsockname(sock, (struct sockaddr *)&sin, &len) == -1) {
perror("getsockname");
} else {
printf("port number %d\n", ntohs(sin.sin_port));
}
}
#包括
#包括
#包括
int main(){
int sock=socket(AF_INET,sock_DGRAM | sock_CLOEXEC,0);
sin中的结构sockaddr_;
socklen_t len=sizeof(sin);
if(getsockname(sock,(struct sockaddr*)和sin,&len)=-1){
perror(“getsockname”);
}否则{
printf(“端口号%d\n”,ntohs(sin.sin_端口));
}
}
它总是打印“端口号0”
是否必须调用bind()才能使用getsockname()?我在网上看到了类似的声明,但我找不到可靠的声明 从手册页:
getsockname()函数应检索指定套接字的本地绑定名
(……)
如果套接字未绑定到本地名称,则存储在地址指向的对象中的值是未指定的
从我这里,你是我的
因此,是的,您需要绑定套接字