Unix 도메인 소켓의 경로가 최대 값을 초과하는지 확인


9

운영 체제는 Unix 도메인 소켓 경로의 길이를 제한합니다. 특정 경로가 해당 제한 내에 있는지 어떻게 확인할 수 있습니까?

또는 다른 방법으로, Linux 또는 Mac OS X 시스템에서 유닉스 도메인 소켓 경로의 최대 허용 길이를 어떻게 확인할 수 있습니까?

내 유스 케이스는 SSH 멀티플렉싱에 대한 것입니다. ControlPath가 너무 길면 유닉스 도메인 소켓을 생성하기 때문에 SSH 멀티플렉싱이 작동하지 않습니다. 실제로 ssh 세션을 시작하고 오류 메시지를 찾을 필요없이 유효한 제어 경로를 확인할 수 있기를 원합니다.

답변:


8

Linux에서 유닉스 도메인 소켓 경로의 최대 허용 길이를 확인하는 방법

Linux에서이 길이는 일반적으로 108로 정의됩니다.

헤더 파일 의 UNIX_PATH_MAX변수에 의해 정의됩니다 /usr/include/linux/un.h.

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

#define UNIX_PATH_MAX   108

자세한 정보는 여기에서 찾을 수 있습니다.


Unix 소켓 경로 주소가 PATH_MAX보다 더 제한된 이유가 있습니까?
CMCDragonkai

6

unix매뉴얼 페이지 에 따르면 Mac OS X에서 :

UNIX-domain addresses are variable-length filesystem pathnames of at most
104 characters.  The include file <sys/un.h> defines this address:

       struct sockaddr_un {
               u_char  sun_len;
               u_char  sun_family;
               char    sun_path[104];
       };

다음은 리눅스와 OS X에서 컴파일하여 유닉스 도메인 소켓 경로의 최대 길이를 출력하는 프로그램입니다.

#include <sys/un.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    struct sockaddr_un s;
    printf("%lu\n", sizeof(s.sun_path));
    return 0;
}

Linux에서는을 출력 108하고 OS X에서는을 출력 104합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.