2011-08-01 2 views
1

C (AF_UNIX)에서 유닉스 소켓과 함께 getaddrinfo를 사용할 수 있는지 알고있는 사람은 누구입니까? 나는 두 가지 시도를했지만 작동하게 만들 수는 없다. 이 내가 노력하고있어 기본적으로 :C에서 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 
} 

내 질문은 유닉스 소켓을 사용할 수 있습니다 경우, 노드 및 서비스 필드를 채우는 방법이다.
미리 감사드립니다. man 3 getaddrinfo 가입일

+0

무엇을하려고합니까? 어떻게 'getaddrinfo'라고 부릅니까? –

답변

-1

:

힌트 파라미터는 바람직한 소켓 타입, 또는 프로토콜을 지정한다. NULL 힌트는 네트워크 주소 나 프로토콜을 수용 할 수 있음을 나타냅니다. 이 매개 변수가 NULL이 아닌 경우, ai_family, ai_socktype 및 ai_protocol 멤버가 기본 소켓 유형을 지정하는 addrinfo 구조체를 가리 킵니다. ai_family의 AF_UNSPEC은 모든 프로토콜 군 (예 : IPv4 또는 IPv6)을 지정합니다. ai_socktype 또는 ai_protocol의 0은 모든 소켓 유형이나 프로토콜이 수용 가능함을 지정합니다. ai_flags 멤버는 아래에 정의 된 추가 옵션을 지정합니다. 여러 플래그는 논리적으로 OR 연산하여 지정됩니다. hints 매개 변수의 다른 모든 멤버는 0 또는 null 포인터를 포함해야합니다.

따라서 유닉스 소켓을 원한다는 것을 알려주기 위해 hints 매개 변수를 전달해야합니다.

+0

예,하지만 제 문제는 소켓을 가리키는 파일을 어디에 설정해야하는지 모르겠다는 것입니다. 나는 getaddrinfo의 첫 번째와 두 번째 인수에서이를 시도했지만 작동하지 않습니다. – esteban

+0

@esteban'getaddrinfo '가 유닉스 소켓에 유효하지 않다는 좋은 힌트가 아닐까요? API를 제공하는 유효한 '노드'또는 '서비스'가 없습니다. –

+0

@ Steve-o 당신이 말했듯이 그것들은 단지 힌트 일뿐입니다. 나는 명확한 대답을 찾고있다. 그렇지 않으면 나는 전혀 질문을하지 않을 것이다. 어쨌든 고맙습니다. – esteban

4

getaddrinfo()의 구현 중 일부는 AF_UNIX 소켓 주소를 지원하지만 더 이상 보안 문제로 인해 더 이상 지원하지 않습니다.

어쨌든 AF_UNIX 주소를 "검색"하는 기능이 필요하지 않습니다. 소켓 경로를 알고 있으면 충분한 크기의 sockaddr_un으로 바로 복사 할 수 있습니다. AF_UNIX 주소에 대한 해결 단계가 없습니다. 소켓 이름 은 소켓 주소 인입니다.

0

많이 늦었지만 레코드에 대해서만 시도해 보셨습니까? struct addrinfo hints, * 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 등) 또는 소켓이 사용되는 해당 서비스의 해당 포트 번호입니다.