📄 codeapi1.htm
字号:
<HTML><HEAD><TITLE>NETBOOK - Code Sample API1</TITLE></HEAD><BODY BGCOLOR="#FFFFFF"><P><TABLE BORDER="0" CELLPADDING="5" CELLSPACING="0" WIDTH="600"><TR> <TD WIDTH="112" VALIGN="TOP" BGCOLOR="#759AC4" CELLPADDING="0"><img src="../pgmatrls/sidebar.gif" width="112" height="410" usemap="#sidebar" ismap alt="" border="0" ><map name="sidebar"><area shape="rect" coords="0,325,100,364" href="../othrpags/page22.htm" ><area shape="rect" coords="0,287,100,326" href="../othrpags/page17.htm" ><area shape="rect" coords="0,248,100,287" href="../othrpags/page18.htm" ><area shape="rect" coords="0,364,100,404" href="../othrpags/code.htm" ><area shape="rect" coords="0,210,100,248" href="../othrpags/page15.htm" ><area shape="rect" coords="0,170,100,210" href="../othrpags/page03.htm" ><area shape="rect" coords="0,132,100,170" href="../othrpags/page10.htm" ><area shape="rect" coords="0,93,100,132" href="../index.htm" ><AREA SHAPE="DEFAULT" NOHREF></map> </TD><TD WIDTH="420" VALIGN="TOP" BGCOLOR="#FFFFFF"><CENTER><H1>Code Sample API1</H1></CENTER><PRE>/* await_contact.c */#include <cnaiapi.h>/*----------------------------------------------------------------------- * await_contact - accept a connection on port a. If no master sock is * already open for the port, create one and record it in the port-to- * socket table. *----------------------------------------------------------------------- */connectionawait_contact(appnum a){ struct sockaddr_in sockaddr, csockaddr; int sock, newsock, i, csockaddrlen; static int p2sinit = 0; static struct port2sock p2s[P2S_SIZE]; cnaiapi_init(); if (a == 0) return -1;#if defined(LINUX) || defined(SOLARIS) pthread_mutex_lock(&await_contact_mutex);#elif defined(WIN32) WaitForSingleObject(await_contact_mutex, INFINITE);#endif if (p2sinit == 0) { (void) memset(p2s, 0, sizeof(p2s)); p2sinit = 1; } /* look up master socket in port-to-socket table */ for (sock = -1, i = 0; i < P2S_SIZE; i++) { if (p2s[i].port == a) { sock = p2s[i].sock; break; } } if (sock == -1) { /* open new master socket */ /* look for room in p2s table */ for (i = 0; i < P2S_SIZE; i++) { if (p2s[i].port == 0) break; } if (i == P2S_SIZE) { /* no room left in p2s */#if defined(LINUX) || defined(SOLARIS) pthread_mutex_unlock(&await_contact_mutex);#elif defined(WIN32) ReleaseMutex(await_contact_mutex);#endif return -1; } sock = socket(PF_INET, SOCK_STREAM, 0); if (sock < 0) {#if defined(LINUX) || defined(SOLARIS) pthread_mutex_unlock(&await_contact_mutex);#elif defined(WIN32) ReleaseMutex(await_contact_mutex);#endif return -1; } (void) memset(&sockaddr, 0, sizeof(struct sockaddr_in)); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(a); sockaddr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(sock, (struct sockaddr *) &sockaddr, sizeof(struct sockaddr_in)) < 0 || listen(sock, LISTEN_Q_LEN) < 0) {#if defined(LINUX) || defined(SOLARIS) close(sock); pthread_mutex_unlock(&await_contact_mutex);#elif defined(WIN32) closesocket(sock); ReleaseMutex(await_contact_mutex);#endif return -1; } /* record master socket in table */ p2s[i].sock = sock; p2s[i].port = a; }#if defined(LINUX) || defined(SOLARIS) pthread_mutex_unlock(&await_contact_mutex);#elif defined(WIN32) ReleaseMutex(await_contact_mutex);#endif csockaddrlen = sizeof(struct sockaddr_in); newsock = accept(sock, (struct sockaddr *) &csockaddr, &csockaddrlen); return newsock;}</PRE><p><p><p><HR WIDTH=89% ALIGN=CENTER SIZE=2><center><h2>Item information</h2></center><p><TABLE CELLSPACING="0"><TD ALIGN="LEFT" VALIGN="TOP">Caption:</TD><TD ALIGN="LEFT"></TD><TR><TD ALIGN="LEFT">Code sample:</TD><TD ALIGN="LEFT">API1</td><tr><TD ALIGN="LEFT">Type:</TD><TD ALIGN="LEFT">code sample</TD><TR><TD ALIGN="LEFT">Item:</TD><TD ALIGN="LEFT"><A HREF="./codeAPI1.txt">Code sample API1</A> without caption</TD><TR><TD ALIGN="LEFT">Keywords:</TD><TD ALIGN="LEFT">network API</TR></TABLE></tr></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -