सॉकेट लाइब्रेरी
परिपक्वता सूचना: यह लाइब्रेरी कार्यात्मक और अच्छी तरह से परीक्षित है लेकिन हाल ही में जारी की गई है। यह विकास, आंतरिक उपकरणों और नियंत्रित वातावरण के लिए उपयुक्त है। अविश्वसनीय नेटवर्क इनपुट के साथ उत्पादन परिनियोजन तब तक प्रतीक्षा करनी चाहिए जब तक कि कोडबेस में वास्तविक दुनिया की हार्डनिंग के कई महीने जमा न हो जाएं।
POSIX प्रणालियों के लिए उच्च-प्रदर्शन, अपवाद-संचालित सॉकेट टूलकिट। TCP, UDP, यूनिक्स डोमेन सॉकेट, HTTP/1.1, HTTP/2, QUIC, WebSocket, और TLS/DTLS के लिए व्यापक त्रुटि प्रबंधन, शून्य-प्रतिलिपि I/O, और क्रॉस-प्लेटफ़ॉर्म इवेंट पोलिंग के साथ एक स्वच्छ, आधुनिक C API प्रदान करता है।
विशेषताएँ
मुख्य नेटवर्किंग
- TCP स्ट्रीम सॉकेट - स्कैटर/गैदर I/O के साथ पूर्ण-विशेषताओं वाला TCP क्लाइंट/सर्वर
- UDP डेटाग्राम सॉकेट - मल्टीकास्ट/ब्रॉडकास्ट के साथ कनेक्शन रहित और कनेक्टेड मोड
- यूनिक्स डोमेन सॉकेट - पीयर क्रेडेंशियल समर्थन और फ़ाइल डिस्क्रिप्टर पासिंग के साथ IPC सॉकेट
- TLS 1.3 समर्थन - SNI, ALPN, सत्र पुनरारंभ, CRL/OCSP, प्रमाणपत्र पिनिंग, प्रमाणपत्र पारदर्शिता (CT), kTLS ऑफलोड, 0-RTT प्रारंभिक डेटा, KeyUpdate के साथ आधुनिक TLS
- DTLS 1.2+ समर्थन - DoS सुरक्षा के लिए कुकी एक्सचेंज, सत्र कैशिंग, ALPN के साथ सुरक्षित UDP
HTTP प्रोटोकॉल स्टैक
- HTTP/1.1 - तालिका-संचालित DFA पार्सर (RFC 9112), चंक्ड एन्कोडिंग, अनुरोध तस्करी रोकथाम
- HTTP/2 - बाइनरी फ्रेमिंग, स्ट्रीम मल्टीप्लेक्सिंग, फ्लो कंट्रोल, सर्वर पुश (RFC 9113)
- HPACK - स्थिर/गतिशील तालिकाओं, हफमैन कोडिंग के साथ हेडर संपीड़न (RFC 7541)
- QPACK - HTTP/3 हेडर संपीड़न (RFC 9204), दो-स्ट्रीम आर्किटेक्चर, अवरुद्ध स्ट्रीम प्रबंधन
- HTTP क्लाइंट - कनेक्शन पूलिंग, प्रमाणीकरण (बेसिक/डाइजेस्ट/बियरर), कुकीज़ (RFC 6265)
- HTTP सर्वर - इवेंट-संचालित अनुरोध हैंडलिंग, कीप-अलाइव, अनुग्रहपूर्ण शटडाउन
QUIC परिवहन
- RFC 9000 अनुरूप - पूर्ण QUIC v1 परिवहन प्रोटोकॉल कार्यान्वयन
- कनेक्शन प्रबंधन - कनेक्शन ID रोटेशन, स्टेटलेस रीसेट, पता सत्यापन
- स्ट्रीम मल्टीप्लेक्सिंग - फ्लो कंट्रोल के साथ द्विदिश और एकदिश स्ट्रीम
- हानि पहचान - RFC 9002 भीड़ नियंत्रण और हानि पुनर्प्राप्ति
- पथ माइग्रेशन - नेटवर्क परिवर्तनों में निर्बाध कनेक्शन माइग्रेशन
- 0-RTT पुनरारंभ - प्रारंभिक डेटा समर्थन के साथ तेज़ पुनः कनेक्शन
QUIC-TLS (RFC 9001)
- पैकेट सुरक्षा - AEAD एन्क्रिप्शन (AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305)
- हेडर सुरक्षा - पैकेट नंबर एन्क्रिप्शन के लिए AES-ECB/ChaCha20 मास्क जेनरेशन
- कुंजी व्युत्पत्ति - क्लाइंट DCID, हैंडशेक/ट्रैफ़िक कुंजियों से HKDF-आधारित प्रारंभिक रहस्य
- कुंजी अद्यतन - AEAD गोपनीयता सीमाओं के साथ कुंजी चरण बिट रोटेशन (RFC 9001 §6)
- रीट्री इंटीग्रिटी - रीट्री पैकेट के लिए AEAD टैग सत्यापन (RFC 9001 §5.8)
- परिवहन पैरामीटर - QUIC कॉन्फ़िगरेशन एक्सचेंज के लिए TLS एक्सटेंशन (प्रकार 0x39)
QPACK (RFC 9204)
- हेडर संपीड़न - HTTP/3 हेडर संपीड़न जो हेड-ऑफ-लाइन ब्लॉकिंग से बचाता है
- दो-स्ट्रीम आर्किटेक्चर - अलग एन्कोडर (0x02) और डिकोडर (0x03) स्ट्रीम
- गतिशील तालिका - एन्कोडर-सापेक्ष और फ़ील्ड-सापेक्ष योजनाओं के साथ पूर्ण अनुक्रमण
- स्थिर तालिका - 99 पूर्व-परिभाषित प्रविष्टियाँ (RFC 9204 परिशिष्ट A)
- स्थिति सिंक्रनाइज़ेशन - अनुभाग स्वीकृति, स्ट्रीम रद्दीकरण, सम्मिलित गणना वृद्धि
- अवरुद्ध स्ट्रीम प्रबंधन - SETTINGS वार्ता के साथ कॉन्फ़िगरेबल अवरुद्ध स्ट्रीम सीमाएँ
WebSocket
- RFC 6455 अनुरूप - पूर्ण WebSocket प्रोटोकॉल कार्यान्वयन
- permessage-deflate - zlib के माध्यम से संपीड़न एक्सटेंशन (RFC 7692)
- इंक्रीमेंटल UTF-8 - टेक्स्ट फ्रेम सत्यापन के लिए DFA-आधारित
- स्वचालित पिंग/पोंग - टाइमर एकीकरण के साथ कॉन्फ़िगरेबल हार्टबीट
प्रॉक्सी टनलिंग
- HTTP CONNECT - बेसिक प्रमाणीकरण के साथ प्रॉक्सी टनलिंग
- SOCKS4/4a - लीगेसी SOCKS समर्थन
- SOCKS5 - RFC 1928/1929 उपयोगकर्ता नाम/पासवर्ड प्रमाणीकरण के साथ
- एसिंक्रोनस API - स्थिति मशीन के साथ गैर-अवरोधक प्रॉक्सी कनेक्शन
इवेंट सिस्टम
- क्रॉस-प्लेटफ़ॉर्म पोलिंग - epoll (Linux), kqueue (BSD/macOS), poll फ़ॉलबैक
- एज-ट्रिगर्ड मोड - उच्च-प्रदर्शन इवेंट सूचना
- एसिंक्रोनस I/O - io_uring (Linux 5.1+), kqueue AIO (BSD/macOS)
- टाइमर - O(log n) मिन-हीप के साथ एक-शॉट और दोहराए जाने वाले
कनेक्शन प्रबंधन
- कनेक्शन पूलिंग - हैश तालिकाओं के साथ O(1) लुकअप, प्रति-कनेक्शन I/O बफ़र
- हैप्पी आइबॉल्स - RFC 8305 डुअल-स्टैक IPv4/IPv6 कनेक्शन रेसिंग
- स्वचालित पुनः-कनेक्शन - सर्किट ब्रेकर पैटर्न के साथ एक्सपोनेंशियल बैकऑफ़
- अनुग्रहपूर्ण शटडाउन - टाइमआउट गारंटी के साथ पूल ड्रेन स्थिति मशीन
सुरक्षा हार्डनिंग
- SYN फ्लड सुरक्षा - प्रतिष्ठा स्कोरिंग, थ्रॉटलिंग, कर्नेल एकीकरण
- प्रति-IP ट्रैकिंग - प्रति क्लाइंट कनेक्शन सीमाएँ और दर सीमा
- दर सीमा - कनेक्शन और बैंडविड्थ के लिए टोकन बकेट एल्गोरिदम
- अनुरोध तस्करी रोकथाम - RFC अनुपालन के साथ सख्त HTTP पार्सिंग
DNS रिज़ॉल्यूशन
- एसिंक्रोनस रिज़ॉल्वर - थ्रेड पूल और क्वेरी मल्टीप्लेक्सिंग के साथ गैर-अवरोधक रिज़ॉल्यूशन
- DNS-over-TLS (DoT) - RFC 7858/8310 अवसरवादी/सख्त मोड के साथ एन्क्रिप्टेड DNS
- DNS-over-HTTPS (DoH) - RFC 8484 DNS क्वेरी HTTPS पर (POST/GET विधियाँ)
- DNSSEC सत्यापन - RFC 4033-4035 ट्रस्ट चेन, NSEC/NSEC3 प्रमाणित अस्वीकृति
- DNS कुकीज़ - RFC 7873 EDNS0 के माध्यम से स्पूफिंग सुरक्षा
- नेगेटिव कैशिंग - RFC 2308 उचित NXDOMAIN/NODATA हैंडलिंग
- विस्तारित DNS त्रुटियाँ - RFC 8914 विस्तृत त्रुटि कोड
बुनियादी ढाँचा
- अपवाद-आधारित त्रुटियाँ -
TRY/EXCEPT/FINALLY के साथ स्वच्छ त्रुटि प्रसार
- सरल API - सामान्य संचालन के लिए रिटर्न-कोड-आधारित सुविधा परत (कोई TRY/EXCEPT आवश्यक नहीं)
- एरीना मेमोरी प्रबंधन - अतिप्रवाह संरक्षण के साथ कुशल आवंटन
- सर्कुलर बफ़र I/O - नेटवर्क संचालन के लिए शून्य-प्रतिलिपि बफ़रिंग
- एसिंक्रोनस I/O - प्लेटफ़ॉर्म-अनुकूलित एसिंक्रोनस संचालन (io_uring/kqueue)
- UTF-8 सत्यापन - WebSocket टेक्स्ट फ्रेम के लिए सुरक्षा-केंद्रित UTF-8 प्रसंस्करण
- सामान्य पुनर्प्रयास फ्रेमवर्क - लचीले संचालन के लिए जिटर के साथ एक्सपोनेंशियल बैकऑफ़
- प्रति-IP कनेक्शन ट्रैकिंग - प्रति क्लाइंट IP कनेक्शन सीमाएँ और दर सीमा
- शून्य-प्रतिलिपि I/O - प्लेटफ़ॉर्म-अनुकूलित
sendfile() और स्कैटर/गैदर I/O
- अवलोकनीयता - प्लगेबल लॉगिंग, Prometheus/StatsD/JSON मीट्रिक्स निर्यात, इवेंट डिस्पैचिंग
- क्रिप्टोग्राफ़िक उपयोगिताएँ - SHA-1/256, HMAC, Base64, सुरक्षित रैंडम
प्लेटफ़ॉर्म आवश्यकताएँ
- POSIX-अनुरूप प्रणाली (Linux, BSD, macOS)
- C11 कंपाइलर GNU एक्सटेंशन के साथ
- POSIX थ्रेड्स (pthread) थ्रेड-सुरक्षित संचालन के लिए
- IPv6 समर्थन कर्नेल में (डुअल-स्टैक सॉकेट के लिए)
- Windows पर पोर्टेबल नहीं Winsock अनुकूलन परत के बिना
प्लेटफ़ॉर्म-विशिष्ट विशेषताएँ
| विशेषता | Linux | BSD/macOS | फ़ॉलबैक |
|---|
| इवेंट पोलिंग | epoll | kqueue | poll(2) |
| एसिंक्रोनस I/O | io_uring (5.1+) | kqueue AIO | एज-ट्रिगर्ड |
| TCP फास्ट ओपन | 3.7+ | 10.0+/10.11+ | अक्षम |
| भीड़ नियंत्रण | कॉन्फ़िगरेबल | - | - |
| पीयर क्रेडेंशियल | SO_PEERCRED | LOCAL_PEERCRED | - |
| SYN सुरक्षा | TCP_DEFER_ACCEPT | SO_ACCEPTFILTER | उपयोगकर्ता स्थान |
TLS/DTLS आवश्यकताएँ
- OpenSSL 1.1.1+ या LibreSSL TLS 1.3 समर्थन के साथ
- डिफ़ॉल्ट रूप से केवल TLS 1.3 (कॉन्फ़िगरेबल)
- सुरक्षित UDP के लिए न्यूनतम DTLS 1.2
त्वरित आरंभ
निर्माण```bash
Basic build
cmake -S . -B build
cmake --build build -j
Run tests
cd build && ctest --output-on-failure
Build with TLS support (auto-detects OpenSSL/LibreSSL)
cmake -S . -B build -DENABLE_TLS=ON
Build with sanitizers for debugging
cmake -S . -B build -DENABLE_SANITIZERS=ON