मैं लिनक्स पर कई प्रक्रियाओं के बीच एक आईपीसी कनेक्शन स्थापित करना चाहता हूं। मैंने पहले कभी यूनिक्स सॉकेट का उपयोग नहीं किया है, और इस प्रकार मुझे नहीं पता कि यह इस समस्या का सही दृष्टिकोण है या नहीं।यूनिक्स डोमेन सॉकेट: एक सर्वर प्रक्रिया और कई क्लाइंट प्रक्रियाओं के बीच डेटाग्राम संचार का उपयोग
एक प्रक्रिया डेटा (अनौपचारिक, बाइनरी) प्राप्त करती है और डाटाग्राम प्रोटोकॉल (यानी AFDPET के साथ यूडीपी के समान) का उपयोग करके स्थानीय डेटा AF_UNIX सॉकेट के माध्यम से इस डेटा को वितरित करेगी। इस प्रक्रिया से स्थानीय यूनिक्स सॉकेट में भेजे गए डेटा को एक ही सॉकेट पर सुनने वाले एकाधिक ग्राहकों द्वारा प्राप्त किया जाएगा। रिसीवर की संख्या अलग-अलग हो सकती है। साथ errno रिपोर्टिंग ENOTCONN ("परिवहन endpoint जुड़ा हुआ नहीं है
struct sockaddr_un ipcFile;
memset(&ipcFile, 0, sizeof(ipcFile));
ipcFile.sun_family = AF_UNIX;
strcpy(ipcFile.sun_path, filename.c_str());
int socket = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(socket, (struct sockaddr *) &ipcFile, sizeof(ipcFile));
...
// buf contains the data, buflen contains the number of bytes
int bytes = write(socket, buf, buflen);
...
close(socket);
unlink(ipcFile.sun_path);
यह लिखने रिटर्न -1:
इस निम्नलिखित कोड प्राप्त करने के लिए एक सॉकेट बनाने और इसे (सर्वर प्रक्रिया) को डेटा भेजने के लिए किया जाता है ")। मुझे लगता है कि ऐसा इसलिए है क्योंकि वर्तमान में कोई स्थानीय प्रक्रिया इस स्थानीय सॉकेट को नहीं सुन रही है?
फिर, मैंने इस सॉकेट से कनेक्ट होने वाले क्लाइंट को बनाने का प्रयास किया।
struct sockaddr_un ipcFile;
memset(&ipcFile, 0, sizeof(ipcFile));
ipcFile.sun_family = AF_UNIX;
strcpy(ipcFile.sun_path, filename.c_str());
int socket = socket(AF_UNIX, SOCK_DGRAM, 0);
bind(socket, (struct sockaddr *) &ipcFile, sizeof(ipcFile));
...
char buf[1024];
int bytes = read(socket, buf, sizeof(buf));
...
close(socket);
यहां, बाइंड विफल रहता है ("पता पहले से उपयोग में है")। तो, क्या मुझे कुछ सॉकेट विकल्प सेट करने की ज़रूरत है, या क्या यह आम तौर पर गलत दृष्टिकोण है?
किसी भी टिप्पणी/समाधान के लिए अग्रिम धन्यवाद!
चेक भी ग्राहक और सी के रूप में सर्वर के रूप में [यहां] (http://stackoverflow.com/a/43421610/4626775) –