Erlang 21

ei_connect




erlang

ei_connect

C लाइब्रेरी

ei_connect

लाइब्रेरी सारांश

वितरित एर्लांग के साथ संवाद करें।

विवरण

यह मॉड्यूल टीसीपी / आईपी पर एरलंग वितरण का उपयोग करके, एरलंग नोड्स के साथ संवाद करने के लिए सी-प्रोग्राम को सक्षम बनाता है।

सी-नोड एक छिपे हुए नोड के रूप में एरलंग को दिखाई देता है। यही है, एरलंग प्रक्रियाएं जो सी-नोड के नाम को जानती हैं, सामान्य तरीके से इसके साथ संवाद कर सकती हैं, लेकिन ERTS में ERTS erlang:nodes/0 द्वारा प्रदान की गई सूची में नोड का नाम नहीं दिखाया गया है।

पर्यावरण चर ERL_EPMD_PORT का उपयोग यह इंगित करने के लिए किया जा सकता है कि C- नोड किस तार्किक क्लस्टर से संबंधित है।

टाइम-आउट कार्य

अधिकांश फ़ंक्शन एक संस्करण में प्रत्यय के साथ दिखाई देते हैं _tmo फ़ंक्शन नाम में संलग्न हैं। वे कार्य एक अतिरिक्त तर्क लेते हैं, मिलीसेकंड में एक टाइम-आउट। शब्दार्थ यह है: ऑपरेशन में शामिल प्रत्येक संचार के लिए, यदि आदिम निर्दिष्ट समय के भीतर पूरा नहीं होता है, तो फ़ंक्शन एक त्रुटि देता है और erl_errno पर सेट ETIMEDOUT । संचार के साथ आदिम का मतलब सॉकेट पर एक ऑपरेशन है, जैसे connect , accept , recv , या send

स्पष्ट रूप से समय-आउट गलती सहिष्णुता को लागू करने के लिए हैं, न कि कठिन वास्तविक समय के वादों को निभाने के लिए। _tmo फ़ंक्शन गैर-उत्तरदायी साथियों का पता लगाने और सॉकेट संचालन पर रोक से बचने के लिए हैं।

0 (शून्य) के टाइम-आउट मान का अर्थ है कि समय-आउट अक्षम हैं। अंतिम तर्क के साथ _tmo फ़ंक्शन को 0 रूप में कॉल करना इसलिए वही कार्य है जो _tmo प्रत्यय के बिना फ़ंक्शन को कॉल करना है।

ei_ शुरू होने वाले अन्य सभी कार्यों की ei_ , आपको प्रोग्राम में सॉकेट को नॉन-ब्लॉकिंग मोड में रखने की उम्मीद नहीं है। नॉन-ब्लॉकिंग मोड का हर उपयोग टाइम-आउट फ़ंक्शन के अंदर एम्बेडेड होता है। ऑपरेशन पूरा होने के बाद (परिणाम की परवाह किए बिना) सॉकेट हमेशा अवरुद्ध मोड में वापस आ जाएगा। समस्याओं से बचने के लिए, सॉकेट विकल्पों को अकेला छोड़ दें। ei किसी भी सॉकेट विकल्प को संभालता है जिसे संशोधन की आवश्यकता होती है।

अन्य सभी इंद्रियों में, _tmo फ़ंक्शन सभी वापसी मानों और शब्दार्थ को _tmo प्रत्यय के बिना कार्यों से _tmo में _tmo है।

निर्यात

struct hostent *ei_gethostbyaddr(const char *addr, int len, int type) struct hostent *ei_gethostbyaddr_r(const char *addr, int length, int type, struct hostent *hostp, char *buffer, int buflen, int *h_errnop) struct hostent *ei_gethostbyname(const char *name) struct hostent *ei_gethostbyname_r(const char *name, struct hostent *hostp, char *buffer, int buflen, int *h_errnop)

कुछ सामान्य नाम लुकअप फ़ंक्शन के लिए सुविधा फ़ंक्शन।

int ei_accept(ei_cnode *ec, int listensock, ErlConnect *conp)

क्लाइंट प्रक्रिया से कनेक्शन स्वीकार करने के लिए सर्वर प्रक्रिया द्वारा उपयोग किया जाता है।

  • ec सी-नोड संरचना है।

  • listensock एक ओपन सॉकेट डिस्क्रिप्टर है जिस पर पहले listen() कहा गया है।

  • conp एक पॉइंटर है जो ErlConnect स्ट्रक्चर का वर्णन करता है, जो इस प्रकार है:

    typedef struct {
      char ipadr[4];             
      char nodename[MAXNODELEN];
    } ErlConnect;

सफलता पर, कनेक्टिंग क्लाइंट के पते और नोड नाम के साथ conp भरा जाता है और एक फ़ाइल विवरणक वापस आ जाता है। असफल होने पर, ERL_ERROR को लौटा दिया जाता है और erl_errno को EIO सेट कर erl_errno जाता है।

int ei_accept_tmo(ei_cnode *ec, int listensock, ErlConnect *conp, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_accept बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_connect(ei_cnode* ec, char *nodename) int ei_xconnect(ei_cnode* ec, Erl_IpAddr adr, char *alivename) int ei_connect(ei_cnode* ec, char *nodename) int ei_xconnect(ei_cnode* ec, Erl_IpAddr adr, char *alivename)

एक इरलांग नोड से संबंध स्थापित करता है।

ei_xconnect() को दूरस्थ होस्ट का IP पता और दूरस्थ नोड के जीवित नाम को निर्दिष्ट करने की आवश्यकता होती है। ei_connect() एक वैकल्पिक इंटरफ़ेस प्रदान करता है और प्रदान किए गए नोड नाम से जानकारी निर्धारित करता है।

  • addr रिमोट होस्ट का 32-बिट IP पता है।
  • alive सुदूर नोड का उपनाम है।
  • node रिमोट नोड का नाम है।

ये फ़ंक्शन सफलता पर एक खुली फ़ाइल डिस्क्रिप्टर या एक नकारात्मक मान दर्शाता है कि त्रुटि हुई। बाद के मामले में उन्होंने निम्नलिखित में से एक को erl_errno सेट किया:

EHOSTUNREACH
दूरस्थ होस्ट node अप्राप्य है।
ENOMEM
अधिक मेमोरी उपलब्ध नहीं है।
EIO
I / O त्रुटि।

इसके अलावा, socket (2) और connect (2) सिस्टम कॉल से erl_errno को erl_errno में प्रचारित किया जा सकता है।

उदाहरण:

#define NODE   "[email protected]"
#define ALIVE  "madonna"
#define IP_ADDR "150.236.14.75"

/*** Variant 1 ***/
int fd = ei_connect(&ec, NODE);

/*** Variant 2 ***/
struct in_addr addr;
addr.s_addr = inet_addr(IP_ADDR);
fd = ei_xconnect(&ec, &addr, ALIVE);

int ei_connect_init(ei_cnode* ec, const char* this_node_name, const char *cookie, short creation) int ei_connect_xinit(ei_cnode* ec, const char *thishostname, const char *thisalivename, const char *thisnodename, Erl_IpAddr thisipaddr, const char *cookie, short creation)

सर्वर के नोड नाम और कुकी की पहचान करने के लिए, ec स्ट्रक्चर की ec करता है। उनमें से एक को अन्य कार्यों से पहले बुलाया जाना चाहिए जो ei_cnode प्रकार पर काम करता है या किसी अन्य नोड से संबंधित कनेक्शन के साथ जुड़ा एक फ़ाइल विवरणक उपयोग किया जाता है।

  • ec एक संरचना है जिसमें C- नोड के बारे में जानकारी होती है। इसका उपयोग डेटा को जोड़ने और प्राप्त करने के लिए अन्य ei कार्यों में किया जाता है।

  • this_node_name प्रक्रिया का पंजीकृत नाम है ('@' से पहले का नाम)।

  • cookie नोड के लिए cookie है।

  • creation सी-नोड के एक विशिष्ट उदाहरण की पहचान करता है। यह नोड को उसी पंजीकृत नाम के साथ पूर्व प्रक्रिया में भेजे गए संदेशों को प्राप्त करने से रोकने में मदद कर सकता है।

  • thishostname उस मशीन का नाम है जिसे हम चला रहे हैं। यदि लंबे नामों का उपयोग किया जाना है, तो उन्हें पूरी तरह से योग्य होना चाहिए (अर्थात, durin.erix.ericsson.se बजाय durin.erix.ericsson.se )।

  • इस प्रक्रिया का पंजीकृत नाम है।

  • thisnodename नोड का पूरा नाम है, वह है, [email protected]

  • अगर यह होस्ट का IP पता है तो thispaddr

सर्वर के रूप में कार्य करने वाला सी-नोड एक सृजन संख्या निर्दिष्ट करता है जब इसे ei_publish()

सॉकेट बंद करने से एक कनेक्शन बंद हो जाता है। गर्तिका को बंद करने के तरीके के बारे में जानकारी के लिए (जब पास से पहले आउटगोइंग पैकेट हैं), संबंधित सिस्टम प्रलेखन देखें।

ये फ़ंक्शन एक नकारात्मक मान लौटाते हैं जो यह दर्शाता है कि त्रुटि हुई।

उदाहरण 1:

int n = 0;
struct in_addr addr;
ei_cnode ec;
addr.s_addr = inet_addr("150.236.14.75");
if (ei_connect_xinit(&ec,
                     "chivas",
                     "madonna",
                     "[email protected]",
                     &addr;
                     "cookie...",
                     n++) < 0) {
    fprintf(stderr,"ERROR when initializing: %d",erl_errno);
    exit(-1);
}

उदाहरण 2:

if (ei_connect_init(&ec, "madonna", "cookie...", n++) < 0) {
    fprintf(stderr,"ERROR when initializing: %d",erl_errno);
    exit(-1);
}

int ei_connect_tmo(ei_cnode* ec, char *nodename, unsigned timeout_ms) int ei_xconnect_tmo(ei_cnode* ec, Erl_IpAddr adr, char *alivename, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_connect और ei_xconnect बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_get_tracelevel(void) void ei_set_tracelevel(int level)

वितरण पर ट्रेसिंग सेट करने के लिए उपयोग किया जाता है। स्तर अलग-अलग क्रियात्मक स्तर हैं। उच्च स्तर का अर्थ है अधिक जानकारी। Debug Information भी अनुभाग देखें।

ये फ़ंक्शन थ्रेड सुरक्षित नहीं हैं।

int ei_publish(ei_cnode *ec, int port)

स्थानीय नाम सर्वर EPMD के साथ पंजीकरण करने के लिए एक सर्वर प्रक्रिया द्वारा उपयोग किया जाता है, जिससे अन्य प्रक्रियाएं पंजीकृत नाम का उपयोग करके संदेश भेजने की अनुमति देती हैं। या तो इन कार्यों को कॉल करने से पहले, प्रक्रिया को एक खुले सॉकेट पर bind() और listen() कहा जाना चाहिए।

  • ec सी-नोड संरचना है।

  • port रजिस्टर करने के लिए स्थानीय नाम है, और पोर्ट नंबर के समान है जो पहले सॉकेट के लिए बाध्य था।

  • addr स्थानीय होस्ट का 32-बिट IP पता है।

ईपीएमडी के साथ अपंजीकृत करने के लिए, बस लौटे विवरणक को बंद करें। ei_unpublish() उपयोग न करें, जो कि वैसे भी पदावनत है।

सफलता पर, फ़ंक्शन कॉल करने की प्रक्रिया को EPMD से जोड़ने वाला एक डिस्क्रिप्टर लौटाता है। असफल होने पर, -1 लौटा दिया जाता है और erl_errno EIO सेट कर erl_errno जाता है।

इसके अलावा, socket (2) और connect (2) सिस्टम कॉल से erl_errno को erl_errno में प्रचारित किया जा सकता है।

int ei_publish_tmo(ei_cnode *ec, int port, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_publish बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_receive(int fd, unsigned char* bufp, int bufsize)

एरलांग बाहरी प्रारूप में बाइट्स के अनुक्रम से मिलकर एक संदेश प्राप्त करता है।

  • fd एक इरलंग कनेक्शन का एक खुला विवरणक है। यह पिछले ei_connect या ei_accept से प्राप्त किया जाता है।

  • bufp एक बफर है जो अपेक्षित संदेश को रखने के लिए पर्याप्त है।

  • bufsize के आकार को इंगित करता है।

यदि एक टिक होता है, ERL_TICK , कनेक्शन के दूसरे छोर पर ERL_TICK नोड ने इस नोड को यह देखने के लिए ERL_TICK किया है कि क्या यह अभी भी जीवित है, तो फ़ंक्शन ERL_TICK देता है और कोई संदेश बफर में नहीं रखा जाता है। इसके अलावा, erl_errno पर सेट है।

सफलता पर, संदेश को निर्दिष्ट बफ़र में रखा गया है और फ़ंक्शन वास्तव में पढ़े जाने वाले बाइट्स की संख्या लौटाता है। विफलता पर, फ़ंक्शन ERL_ERROR लौटाता है और erl_errno को निम्न में से एक में सेट करता है:

EAGAIN
अस्थायी त्रुटि: पुन: प्रयास करें।
EMSGSIZE
बफर बहुत छोटा है।
EIO
I / O त्रुटि।

int ei_receive_encoded(int fd, char **mbufp, int *bufsz, erlang_msg *msg, int *msglen)

यह फ़ंक्शन इंटरफ़ेस कंपाइलर द्वारा उत्पन्न कोड के साथ संगतता के लिए और उसी एप्लिकेशन में उदाहरण के बाद कोड के साथ बनाए रखा जाता है।

संक्षेप में, फ़ंक्शन ei_xreceive_msg के समान ही कार्य करता है, लेकिन ei_xreceive_msg का उपयोग करने के बजाय, फ़ंक्शन एक पॉइंटर पॉइंटर ( mbufp ) को पॉइंटर की अपेक्षा करता है, जहां कैरेक्टर पॉइंटर को malloc द्वारा आवंटित मेमोरी क्षेत्र को इंगित करना है। तर्क bufsz एक पूर्णांक के लिए एक संकेतक होना चाहिए जिसमें मेमोरी क्षेत्र का सटीक आकार (बाइट्स में) हो। यह कार्य मेमोरी क्षेत्र को पुनः प्राप्त कर सकता है और ऐसे मामलों में नए आकार को *bufsz और update *mbufp में डाल *mbufp

या तो ERL_TICK या erlang_msg *msg के msgtype फ़ील्ड को erlang_msg *msg । संदेश की लंबाई *msglen में डाल *msglen । त्रुटि पर मान < 0 वापस कर दिया जाता है।

पठनीयता के लिए, जब संभव हो तो इसके बजाय ei_xreceive_msg का उपयोग करने की सिफारिश की जाती है। हालांकि, फ़ंक्शन को संगतता के लिए इंटरफ़ेस में रखा जाएगा और पूर्व सूचना के बिना भविष्य के रिलीज़ में नहीं हटाया जाएगा।

int ei_receive_encoded_tmo(int fd, char **mbufp, int *bufsz, erlang_msg *msg, int *msglen, unsigned timeout_ms)

वैकल्पिक समय-आउट तर्क के साथ ei_receive_encoded बराबर, इस मैनुअल पृष्ठ की शुरुआत में विवरण देखें।

int ei_receive_msg(int fd, erlang_msg* msg, ei_x_buff* x) int ei_xreceive_msg(int fd, erlang_msg* msg, ei_x_buff* x)

x में बफ़र के लिए एक संदेश प्राप्त करता है। ei_xreceive_msg x में बफर को बढ़ने की अनुमति देता है, लेकिन यदि संदेश x में पूर्व-आवंटित बफर से बड़ा है तो ei_receive_msg विफल हो जाता है।

  • fd एक इरलंग कनेक्शन का एक खुला विवरणक है।
  • msg एक erlang_msg संरचना का एक संकेतक है और प्राप्त संदेश पर जानकारी समाहित करता है।
  • x को ei_x_new से प्राप्त बफर है।

सफलता मिलने पर, फ़ंक्शन ERL_MSG वापस ERL_MSG और msg संरचना आरंभ होती है। erlang_msg को इस प्रकार परिभाषित किया गया है:

typedef struct {
    long msgtype;
    erlang_pid from;
    erlang_pid to;
    char toname[MAXATOMLEN+1];
    char cookie[MAXATOMLEN+1];
    erlang_trace token;
} erlang_msg;

संदेश टाइप संदेश के प्रकार की पहचान करता है, और निम्न में से एक है:

ERL_SEND

इंगित करता है कि एक साधारण भेजने का ऑपरेशन हुआ है। msg->to प्राप्तकर्ता ( msg->to -नोड) के पीआईडी msg->to समाहित करने के लिए।

ERL_REG_SEND

एक पंजीकृत भेज ऑपरेशन हुआ। msg->from प्रेषक का पिड शामिल है।

ERL_LINK या ERL_UNLINK

msg->to msg->from और msg->from भेजने वाले के लिंक और संदेश को लिंक या अनलिंक करें।

ERL_EXIT

एक टूटी हुई कड़ी का संकेत देता है। msg->to और msg->from जुड़ी प्रक्रियाओं के pids होते हैं।

वापसी मान ei_receive के समान है।

int ei_receive_msg_tmo(int fd, erlang_msg* msg, ei_x_buff* x, unsigned imeout_ms) int ei_xreceive_msg_tmo(int fd, erlang_msg* msg, ei_x_buff* x, unsigned timeout_ms)

वैकल्पिक टाइम-आउट तर्क के साथ ei_receive_msg और ei_xreceive_msg बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_receive_tmo(int fd, unsigned char* bufp, int bufsize, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_receive बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_reg_send(ei_cnode* ec, int fd, char* server_name, char* buf, int len)

एक पंजीकृत प्रक्रिया के लिए एक इरलांग शब्द भेजता है।

  • fd एक इरलंग कनेक्शन का एक खुला विवरणक है।

  • server_name इच्छित प्राप्तकर्ता का पंजीकृत नाम है।
  • buf द्विआधारी प्रारूप में शब्द युक्त बफर है।
  • संदेश बाइट में संदेश की लंबाई है।

0 रिटर्न अगर सफल, अन्यथा -1 । बाद के मामले में यह erl_errno से EIO सेट erl_errno है।

उदाहरण:

"कार्यकर्ता" प्रक्रिया को परमाणु "ठीक" भेजें:

ei_x_buff x;
ei_x_new_with_version(&x);
ei_x_encode_atom(&x, "ok");
if (ei_reg_send(&ec, fd, x.buff, x.index) < 0)
    handle_error();

int ei_reg_send_tmo(ei_cnode* ec, int fd, char* server_name, char* buf, int len, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_reg_send बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_rpc(ei_cnode *ec, int fd, char *mod, char *fun, const char *argbuf, int argbuflen, ei_x_buff *x) int ei_rpc_to(ei_cnode *ec, int fd, char *mod, char *fun, const char *argbuf, int argbuflen) int ei_rpc(ei_cnode *ec, int fd, char *mod, char *fun, const char *argbuf, int argbuflen, ei_x_buff *x) int ei_rpc_to(ei_cnode *ec, int fd, char *mod, char *fun, const char *argbuf, int argbuflen) int ei_rpc_from(ei_cnode *ec, int fd, int timeout, erlang_msg *msg, ei_x_buff *x)

दूरस्थ नोड पर एरलांग फ़ंक्शन को कॉल करने का समर्थन करता है। ei_rpc_to() दूरस्थ नोड के लिए RPC अनुरोध भेजता है और ei_rpc_from() ऐसी कॉल के परिणाम प्राप्त करता है। ei_rpc() RPC अनुरोध भेजकर और परिणामों की प्रतीक्षा करके इन दोनों कार्यों की कार्यक्षमता को जोड़ती है। rpc:call/4 भी देखें rpc:call/4 कर्नेल में।

  • ec पहले सी-नोड संरचना है जिसे ei_connect_init() या ei_connect_xinit() लिए एक कॉल द्वारा शुरू किया गया है।

  • fd एक इरलंग कनेक्शन का एक खुला विवरणक है।

  • परिणामों की प्रतीक्षा करने के लिए timeout अधिकतम समय (मिलीसेकंड में) है। ERL_NO_TIMEOUT हमेशा प्रतीक्षा करने के लिए निर्दिष्ट करें। ei_rpc() उत्तर के लिए असीम प्रतीक्षा करता है, अर्थात, कॉल कभी भी समाप्त नहीं होगा।

  • mod उस मॉड्यूल का नाम है जिसमें रिमोट नोड पर चलने वाले फ़ंक्शन होते हैं।

  • fun को चलाने के लिए फ़ंक्शन का नाम है।

  • argbuf एक एन्कोडेड argbuf सूची के साथ एक बफर के लिए एक संकेतक है, एक वर्जन मैजिक नंबर के बिना, फ़ंक्शन को पास करने के लिए तर्क युक्त।

  • argbuflen बफर की लंबाई एन्कोडेड Erlang सूची युक्त है।

  • msg , erlang_msg प्रकार की संरचना है और इसमें प्राप्त संदेश की जानकारी है। erlang_msg प्रारूप के विवरण के लिए, ei_receive_msg देखें।

  • x डायनेमिक बफ़र को इंगित करता है जो परिणाम प्राप्त करता है। ei_rpc() यह संस्करण मैजिक नंबर के बिना परिणाम है। ei_rpc_from() लिए परिणाम एक वर्जन मैजिक नंबर और 2-ट्यूपल {rex,Reply} ei_rpc_from() {rex,Reply}

ei_rpc() सफलता पर परिणाम में बाइट्स की संख्या और -1 विफलता पर देता है। ei_rpc_from() बाइट्स की संख्या लौटाता है, अन्यथा ERL_TICK , ERL_TIMEOUT और ERL_ERROR । असफल होने पर, सभी तीन फ़ंक्शन erl_errno को निम्न में से एक में सेट करते हैं:

EIO
I / O त्रुटि।
ETIMEDOUT
मध्यांतर बीत गया।
EAGAIN
अस्थायी त्रुटि: पुन: प्रयास करें।

उदाहरण:

यह देखने के लिए जांचें कि क्या एरलांग प्रक्रिया जीवित है:

int index = 0, is_alive;
ei_x_buff args, result;

ei_x_new(&result);
ei_x_new(&args);
ei_x_encode_list_header(&args, 1);
ei_x_encode_pid(&args, &check_pid);
ei_x_encode_empty_list(&args);

if (ei_rpc(&ec, fd, "erlang", "is_process_alive",
           args.buff, args.index, &result) < 0)
    handle_error();

if (ei_decode_version(result.buff, &index) < 0
    || ei_decode_bool(result.buff, &index, &is_alive) < 0)
    handle_error();

erlang_pid *ei_self(ei_cnode *ec)

C- नोड के pid को पुनः प्राप्त करता है। प्रत्येक C- नोड में ei_send_reg , ei_rpc , और अन्य में उपयोग किया जाने वाला (छद्म) pid है। यह एक संरचना में एक क्षेत्र में निहित है। इस क्षेत्र को सीधे ei_cnode संरचना से लाने के लिए लंबे समय तक सुरक्षित ei_cnode

int ei_send(int fd, erlang_pid* to, char* buf, int len)

एक प्रक्रिया के लिए एक इरलांग शब्द भेजता है।

  • fd एक इरलंग कनेक्शन का एक खुला विवरणक है।
  • संदेश के इच्छित प्राप्तकर्ता की पीड है।
  • buf द्विआधारी प्रारूप में शब्द युक्त बफर है।
  • संदेश बाइट में संदेश की लंबाई है।

0 रिटर्न अगर सफल, अन्यथा -1 । बाद के मामले में यह erl_errno से EIO सेट erl_errno है।

int ei_send_encoded(int fd, erlang_pid* to, char* buf, int len)

बिल्कुल ei_send रूप में काम करता है, वैकल्पिक नाम पिछड़े संगतता के लिए बनाए रखा है। बिना पूर्व सूचना के कार्य नहीं हटाया जाएगा।

int ei_send_encoded_tmo(int fd, erlang_pid* to, char* buf, int len, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_send_encoded बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

int ei_send_reg_encoded(int fd, const erlang_pid *from, const char *to, const char *buf, int len)

यह फ़ंक्शन इंटरफ़ेस कंपाइलर द्वारा उत्पन्न कोड के साथ संगतता के लिए और उसी एप्लिकेशन में उदाहरण के बाद कोड के साथ बनाए रखा जाता है।

फ़ंक्शन एक अपवाद के साथ ei_reg_send रूप में काम करता है। पहले तर्क के रूप में ei_cnode लेने के बजाय, यह दूसरा तर्क लेता है, एक erlang_pid , जो भेजने की प्रक्रिया (Erlang वितरण प्रोटोकॉल में) की प्रक्रिया पहचानकर्ता होना है।

निम्न उदाहरण कोड द्वारा ei_cnode संरचना से एक उपयुक्त erlang_pid का निर्माण किया जा सकता है:

ei_cnode ec;
erlang_pid *self;
int fd; /* the connection fd */
...
self = ei_self(&ec);
self->num = fd;

int ei_send_reg_encoded_tmo(int fd, const erlang_pid *from, const char *to, const char *buf, int len)

वैकल्पिक समय-आउट तर्क के साथ ei_send_reg_encoded बराबर, इस मैनुअल पृष्ठ की शुरुआत में विवरण देखें।

int ei_send_tmo(int fd, erlang_pid* to, char* buf, int len, unsigned timeout_ms)

एक वैकल्पिक टाइम-आउट तर्क के साथ ei_send बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

const char *ei_thisnodename(ei_cnode *ec) const char *ei_thishostname(ei_cnode *ec) const char *ei_thisalivename(ei_cnode *ec)

सी-नोड के बारे में जानकारी प्राप्त करने के लिए इस्तेमाल किया जा सकता है। ये मान प्रारंभ में ei_connect_init() या ei_connect_xinit() साथ सेट किए ei_connect_init()

ये फंक्शन साधारण संरचना से उचित क्षेत्र प्राप्त करते हैं। फ़ील्ड को सीधे पढ़ें शायद लंबे समय तक सुरक्षित रहेगा, इसलिए इन कार्यों की वास्तव में आवश्यकता नहीं है।

int ei_unpublish(ei_cnode *ec)

स्थानीय मेजबान पर ईपीएमडी से एक निर्दिष्ट नोड को अपंजीकृत करने की प्रक्रिया द्वारा बुलाया जा सकता है। यह, हालांकि, आमतौर पर अनुमति नहीं है, जब तक कि ईपीएमडी को फ्लैग के साथ शुरू नहीं किया गया -relaxed_command_check , जो यह सामान्य रूप से नहीं है।

आपके द्वारा प्रकाशित नोड को अपंजीकृत करने के लिए, आपको उस विवरणक को बंद करना चाहिए जो ei_publish() द्वारा वापस किया गया था।

चेतावनी

यह फ़ंक्शन हटा दिया गया है और भविष्य में रिलीज़ में हटा दिया जाएगा।

ec नोड की नोड संरचना है जिसे अपंजीकृत करना है।

यदि नोड को EPMD से सफलतापूर्वक अनरजिस्टर्ड किया गया था, तो फ़ंक्शन 0 देता है। अन्यथा, -1 वापस आ गया है और erl_errno EIO सेट है।

int ei_unpublish_tmo(ei_cnode *ec, unsigned timeout_ms)

वैकल्पिक टाइम-आउट तर्क के साथ ei_unpublish बराबर, इस मैनुअल पेज की शुरुआत में विवरण देखें।

डिबग जानकारी

यदि कोई कनेक्शन प्रयास विफल हो जाता है, तो निम्न जाँच की जा सकती है:

  • erl_errno
  • कि सही कुकी का उपयोग किया गया था
  • वह ईपीएमडी चला रहा है
  • कि दूसरी तरफ रिमोट एरलैंग नोड, एरलांग के उसी संस्करण को ei लाइब्रेरी के रूप में चला रहा है
  • उस वातावरण चर ERL_EPMD_PORT को सही ढंग से सेट किया गया है

कनेक्शन का प्रयास या तो ei_set_tracelevel का उपयोग करके ट्रेस स्तर सेट करके या पर्यावरण चर EI_TRACELEVEL को सेट करके किया जा सकता है। ट्रेस स्तरों में निम्न संदेश हैं:

  • 1: वर्बोज़ त्रुटि संदेश
  • 2: उपरोक्त संदेश और क्रिया चेतावनी संदेश
  • 3: कनेक्शन हैंडलिंग के लिए उपरोक्त संदेश और प्रगति रिपोर्ट
  • 4: संदेश के ऊपर और संचार के लिए प्रगति रिपोर्ट
  • 5: डेटा रूपांतरण के लिए संदेशों और प्रगति रिपोर्ट के ऊपर