我有一个使用 Berkley 套接字和 Winsock(取决于平台)的 UDP 客户端程序。
基本上它使用getaddrinfo()
, then socket()
, then sendto()
。sendto()
获取由 . 返回的地址信息getaddrinfo()
。我的代码如下所示:
struct addrinfo hint;
memset(&hint, 0, sizeof(hint));
hint.ai_socktype = SOCK_DGRAM;
struct addrinfo *address;
getaddrinfo("127.0.0.1", "9999", &hint, &address);
SOCKET s = socket(address->ai_family, address->ai_socktype, address->ai_protocol);
sendto(s, "test", 4, 0, address->ai_addr, address->ai_addrlen);
我的问题是,什么时候设置本地/临时端口号?是否设置了对 的调用sendto()
?如果我将更多数据发送到不同的服务器,是否会sendto()
重用相同的临时端口号?如何获取临时端口号(以独立于协议的方式)?我知道知道这可能没有用,而且 NAT 无论如何都可以改变它,但我只是想了解它是如何更好地工作的。
我也知道我可以bind()
用来设置本地端口,但我的问题是当操作系统为我选择本地端口时会发生什么。