簡體   English   中英

如何從 unix c 中的 struct addrinfo 獲取端口號

[英]How to get the port number from struct addrinfo in unix c

我需要通過特定端口中的 UDP 將一些數據發送到遠程服務器並從它接收響應。 但是,它正在阻塞,我沒有得到任何響應。 我需要檢查從getaddrinfo(SERVER_NAME, port, &hints, &servinfo)獲得的 addrinfo 值是否正確。

如何從這個數據結構中獲取端口號?

我知道inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof s)給了我服務器 IP 地址。 (我正在使用 Beej 指南中的方法。)

你做一些類似於 Beej 的 get_in_addr 函數所做的事情:

// get port, IPv4 or IPv6:
in_port_t get_in_port(struct sockaddr *sa)
{
    if (sa->sa_family == AF_INET)
        return (((struct sockaddr_in*)sa)->sin_port);

    return (((struct sockaddr_in6*)sa)->sin6_port);
}

還要注意在sockaddr_in (或sockaddr_in6 )結構中處理端口號的#1 陷阱:端口號總是以網絡字節順序存儲。

這意味着,例如,如果你打印出上面get_in_port()調用的結果,你需要拋出一個ntohs()

printf("port is %d\n", ntohs(get_in_port((struct sockaddr *)p->ai_addr)));

暫無
暫無

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

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