【发布时间】:2021-11-15 08:47:26
【问题描述】:
我正在尝试将 ipv6 端口绑定到 ipv6 套接字。但是绑定的端口和我指定的不一样。
#include <netdb.h>
#include <netinet/tcp.h>
#include <poll.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int unconnected_sock_ =
socket(PF_INET6, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, 0);
struct sockaddr_in6 addr = {0};
addr.sin6_family = AF_INET6;
addr.sin6_port = atoi(argv[1]);
addr.sin6_addr = in6addr_any;
if (bind(unconnected_sock_,
(struct sockaddr*)(&addr),
sizeof(addr)) != 0) {
fprintf(stderr, " error : %s\n", strerror(errno));
}
struct sockaddr_in6 sin;
socklen_t len = sizeof(sin);
getsockname(unconnected_sock_, (struct sockaddr *)&sin, &len);
fprintf(stderr, "port number %d\n", ntohs(sin.sin6_port));
}
output:
ubun - main: ~/socket.exe 54682
port number 39637
【问题讨论】: