簡體   English   中英

在C中使用getaddrinfo()的Unix套接字

[英]Unix sockets with getaddrinfo() in C

有誰知道是否可以在C(AF_UNIX)中的unix套接字上使用getaddrinfo。 我已經嘗試了一些方法,但是無法使其正常工作。 這基本上是我正在嘗試的:

struct addrinfo hints, *res;

memset(&hints, 0, sizeof(hints));
hints.ai_family   = AF_UNIX;
hints.ai_socktype = SOCK_STREAM;
if(getaddrinfo("What should I put here?", "What should I put here?", &hints, &res) != 0){
    //do sth about
}

我的問題是,如何在unix套接字中使用它,如何填充節點和服務字段。
提前致謝。

getaddrinfo()某些實現支持AF_UNIX套接字地址,但是出於安全考慮,它們不再支持。

無論如何,您實際上並不需要一個函數來“查找” AF_UNIX地址-如果您知道套接字路徑,則可以將其直接復制到足夠大小的sockaddr_un中。 AF_UNIX地址沒有解析步驟-套接字名稱套接字地址。

很晚了,但是只是為了記錄,您是否嘗試過-struct addrinfo提示,* res;

memset(&hints, 0, sizeof(hints));
hints.ai_family   = AF_UNSPEC;   //is the address family(IPV4 or 6) or UNSPEC for either
hints.ai_socktype = SOCK_STREAM; 
if(getaddrinfo(parm1, parm2, &hints, &res) != 0){
    //do sth about
}

parm1->是要連接的主機名或地址。 在此處使用NULL進行的調用將放置本地主機的地址,在這種情況下,您將指定hints.ai_flags = AI_PASSIVE。 parm2->是預期服務的名稱(http,ftp等)或套接字用於該服務的相應端口號

man 3 getaddrinfo

hints參數指定首選的套接字類型或協議。 NULL提示表明任何網絡地址或協議都是可接受的。 如果此參數不為NULL,則指向一個addrinfo結構,該結構的ai_family,ai_socktype和ai_protocol成員指定首選的套接字類型。 ai_family中的AF_UNSPEC指定任何協議家族(例如IPv4或IPv6)。 ai_socktype或ai_protocol中的0指定也可以接受任何套接字類型或協議。 ai_flags成員指定其他選項,定義如下。 通過對它們進行邏輯或運算來指定多個標志。 hints參數中的所有其他成員必須包含0或空指針。

因此,看起來您需要傳遞hints參數來告訴您您想要一個Unix套接字。

暫無
暫無

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

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