जांचें कि क्या कोई पथ यूनिक्स डोमेन सॉकेट के लिए अधिकतम से अधिक है


9

ऑपरेटिंग सिस्टम एक यूनिक्स डोमेन सॉकेट के पथ की लंबाई को सीमित करता है। मैं कैसे जांच सकता हूं कि उस सीमा के भीतर एक विशेष पथ है या नहीं?

या, इसे दूसरे तरीके से रखने के लिए, मैं लिनक्स या मैक ओएस एक्स सिस्टम पर एक यूनिक्स डोमेन सॉकेट के पथ की अधिकतम अनुमत लंबाई की जांच कैसे कर सकता हूं?

यहां मेरा उपयोग मामला SSH मल्टीप्लेक्सिंग के लिए है: यदि ControlPath बहुत लंबा है, तो SSH मल्टीप्लेक्सिंग काम नहीं करेगा क्योंकि यह एक यूनिक्स डोमेन सॉकेट बनाता है। मैं वास्तव में एक ssh सत्र शुरू करने और त्रुटि संदेश की तलाश किए बिना एक वैध नियंत्रण पथ की जांच करने में सक्षम होना चाहता हूं।

जवाबों:


8

मैं लिनक्स पर यूनिक्स डोमेन सॉकेट के पथ की अधिकतम अनुमत लंबाई की जांच कैसे कर सकता हूं

लिनक्स पर, यह लंबाई आमतौर पर 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

आप अधिक जानकारी यहाँ पा सकते हैं:


क्या एक कारण है कि यूनिक्स सॉकेट पथ पते PATH_MAX की तुलना में अधिक सीमित हैं?
CMCDragonkai 10

6

मैक ओएस एक्स पर, unixमैन पेज के अनुसार :

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];
       };

यहां एक प्रोग्राम है जो लिनक्स और ओएस एक्स दोनों पर संकलित है जो एक यूनिक्स डोमेन सॉकेट के पथ की अधिकतम लंबाई को आउटपुट करेगा।

#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;
}

लिनक्स पर, यह आउटपुट करता है 108, और ओएस एक्स पर, यह आउटपुट करता है 104

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.