簡體   English   中英

Windows上的C:綁定到免費的隨機端口並獲取端口號

[英]C on Windows: Bind to a free random port and get the port number

在Linux上,我會這樣做:

serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(0);

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
{
    perror("ERROR on binding");
    *err = -2;
}
struct sockaddr_in sin;
socklen_t len = sizeof(sin);

if (getsockname(sockfd, (struct sockaddr *)&sin, &len) == -1)
{
    *err = -2;
    perror("getsockname");
}

在Windows中,我有:

hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
//using 0 instead of DEFAULT_PORT gives me host not found.
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); 
ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);

socklen_t len = sizeof(result->ai_addr);
printf("Port number: %d", getsockname(ListenSocket, result->ai_addr, &len));

iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);

freeaddrinfo(result);
iResult = listen(ListenSocket, 4);

謝謝

Windows在這里與Linux相同。

您的Linux代碼不只可以在Windows上運行嗎? 確實,除了一些特殊情況和初始化Winsock( https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms742213 ( v= vs 。 85).aspx )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM