]> begriffs open source - cmsis/blob - main/Driver/group__wifi__socket__gr.html
Update documentation for branch main
[cmsis] / main / Driver / group__wifi__socket__gr.html
1 <!-- HTML header for doxygen 1.9.6-->
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
4 <head>
5 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
6 <meta http-equiv="X-UA-Compatible" content="IE=11"/>
7 <meta name="viewport" content="width=device-width, initial-scale=1"/>
8 <title>CMSIS-Driver: WiFi Socket</title>
9 <link href="doxygen.css" rel="stylesheet" type="text/css" />
10 <script type="text/javascript" src="jquery.js"></script>
11 <script type="text/javascript" src="dynsections.js"></script>
12 <script type="text/javascript" src="tabs.js"></script>
13 <script type="text/javascript" src="footer.js"></script>
14 <script type="text/javascript" src="navtree.js"></script>
15 <link href="navtree.css" rel="stylesheet" type="text/css"/>
16 <script type="text/javascript" src="resize.js"></script>
17 <script type="text/javascript" src="navtreedata.js"></script>
18 <script type="text/javascript" src="navtree.js"></script>
19 <link href="search/search.css" rel="stylesheet" type="text/css"/>
20 <script type="text/javascript" src="search/searchdata.js"></script>
21 <script type="text/javascript" src="search/search.js"></script>
22 <script type="text/javascript">
23 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
24   $(document).ready(function() { init_search(); });
25 /* @license-end */
26 </script>
27 <script type="text/javascript" src="darkmode_toggle.js"></script>
28 <link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
29 <link href="extra_navtree.css" rel="stylesheet" type="text/css"/>
30 <link href="extra_search.css" rel="stylesheet" type="text/css"/>
31 <link href="extra_tabs.css" rel="stylesheet" type="text/css"/>
32 <link href="version.css" rel="stylesheet" type="text/css"/>
33 <script type="text/javascript" src="../../version.js"></script>
34 </head>
35 <body>
36 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
37 <div id="titlearea">
38 <table cellspacing="0" cellpadding="0">
39  <tbody>
40  <tr style="height: 55px;">
41   <td id="projectlogo" style="padding: 1.5em;"><img alt="Logo" src="cmsis_logo_white_small.png"/></td>
42   <td style="padding-left: 1em; padding-bottom: 1em;padding-top: 1em;">
43    <div id="projectname">CMSIS-Driver
44    &#160;<span id="projectnumber"><script type="text/javascript">
45      <!--
46      writeHeader.call(this);
47      writeVersionDropdown.call(this, "CMSIS-Driver");
48      //-->
49     </script>
50    </span>
51    </div>
52    <div id="projectbrief">Peripheral Interface for Middleware and Application Code</div>
53   </td>
54    <td>        <div id="MSearchBox" class="MSearchBoxInactive">
55         <span class="left">
56           <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
57           <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
58                onfocus="searchBox.OnSearchFieldFocus(true)" 
59                onblur="searchBox.OnSearchFieldFocus(false)" 
60                onkeyup="searchBox.OnSearchFieldChange(event)"/>
61           </span><span class="right">
62             <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
63           </span>
64         </div>
65 </td>
66   <!--END !PROJECT_NAME-->
67  </tr>
68  </tbody>
69 </table>
70 </div>
71 <!-- end header part -->
72 <div id="CMSISnav" class="tabs1">
73   <ul class="tablist">
74     <script type="text/javascript">
75       writeComponentTabs.call(this);
76     </script>
77   </ul>
78 </div>
79 <script type="text/javascript">
80   writeSubComponentTabs.call(this);
81 </script>
82 <!-- Generated by Doxygen 1.9.6 -->
83 <script type="text/javascript">
84 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
85 var searchBox = new SearchBox("searchBox", "search/",'.html');
86 /* @license-end */
87 </script>
88 </div><!-- top -->
89 <div id="side-nav" class="ui-resizable side-nav-resizable">
90   <div id="nav-tree">
91     <div id="nav-tree-contents">
92       <div id="nav-sync" class="sync"></div>
93     </div>
94   </div>
95   <div id="splitbar" style="-moz-user-select:none;" 
96        class="ui-resizable-handle">
97   </div>
98 </div>
99 <script type="text/javascript">
100 /* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
101 $(document).ready(function(){initNavTree('group__wifi__socket__gr.html',''); initResizable(); });
102 /* @license-end */
103 </script>
104 <div id="doc-content">
105 <!-- window showing the filter options -->
106 <div id="MSearchSelectWindow"
107      onmouseover="return searchBox.OnSearchSelectShow()"
108      onmouseout="return searchBox.OnSearchSelectHide()"
109      onkeydown="return searchBox.OnSearchSelectKey(event)">
110 </div>
111
112 <!-- iframe showing the search results (closed by default) -->
113 <div id="MSearchResultsWindow">
114 <div id="MSearchResults">
115 <div class="SRPage">
116 <div id="SRIndex">
117 <div id="SRResults"></div>
118 <div class="SRStatus" id="Loading">Loading...</div>
119 <div class="SRStatus" id="Searching">Searching...</div>
120 <div class="SRStatus" id="NoMatches">No Matches</div>
121 </div>
122 </div>
123 </div>
124 </div>
125
126 <div class="header">
127   <div class="summary">
128 <a href="#groups">Content</a> &#124;
129 <a href="#func-members">Functions</a>  </div>
130   <div class="headertitle"><div class="title">WiFi Socket<div class="ingroups"><a class="el" href="group__wifi__interface__gr.html">WiFi Interface</a></div></div></div>
131 </div><!--header-->
132 <div class="contents">
133
134 <p>Socket interface to IP stack running on WiFi module.  
135 <a href="#details">More...</a></p>
136 <table class="memberdecls">
137 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="groups" name="groups"></a>
138 Content</h2></td></tr>
139 <tr class="memitem:group__wifi__addr__family"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__addr__family.html">WiFi Socket Address Family definitions</a></td></tr>
140 <tr class="memdesc:group__wifi__addr__family"><td class="mdescLeft">&#160;</td><td class="mdescRight">WiFi Socket Address Family definitions. <br /></td></tr>
141 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
142 <tr class="memitem:group__wifi__socket__type"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__type.html">WiFi Socket Type definitions</a></td></tr>
143 <tr class="memdesc:group__wifi__socket__type"><td class="mdescLeft">&#160;</td><td class="mdescRight">WiFi Socket Type definitions. <br /></td></tr>
144 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
145 <tr class="memitem:group__wifi__protocol"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__protocol.html">WiFi Socket Protocol definitions</a></td></tr>
146 <tr class="memdesc:group__wifi__protocol"><td class="mdescLeft">&#160;</td><td class="mdescRight">WiFi Socket Protocol definitions. <br /></td></tr>
147 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
148 <tr class="memitem:group__wifi__soc__opt"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__soc__opt.html">WiFi Socket Option definitions</a></td></tr>
149 <tr class="memdesc:group__wifi__soc__opt"><td class="mdescLeft">&#160;</td><td class="mdescRight">WiFi Socket Option definitions. <br /></td></tr>
150 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
151 <tr class="memitem:group__wifi__soc__func"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__soc__func.html">WiFi Socket Function return codes</a></td></tr>
152 <tr class="memdesc:group__wifi__soc__func"><td class="mdescLeft">&#160;</td><td class="mdescRight">WiFi Socket Function return codes. <br /></td></tr>
153 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
154 </table><table class="memberdecls">
155 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
156 Functions</h2></td></tr>
157 <tr class="memitem:ga1433b297315ab394f1544a18548ffcc6"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a> (int32_t af, int32_t type, int32_t protocol)</td></tr>
158 <tr class="memdesc:ga1433b297315ab394f1544a18548ffcc6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a communication socket.  <br /></td></tr>
159 <tr class="separator:ga1433b297315ab394f1544a18548ffcc6"><td class="memSeparator" colspan="2">&#160;</td></tr>
160 <tr class="memitem:gae69f7822b658765f1cd3f74e9a50c246"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gae69f7822b658765f1cd3f74e9a50c246">ARM_WIFI_SocketBind</a> (int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port)</td></tr>
161 <tr class="memdesc:gae69f7822b658765f1cd3f74e9a50c246"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign a local address to a socket.  <br /></td></tr>
162 <tr class="separator:gae69f7822b658765f1cd3f74e9a50c246"><td class="memSeparator" colspan="2">&#160;</td></tr>
163 <tr class="memitem:ga4929aab257781dcaae7197f917991779"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a> (int32_t socket, int32_t backlog)</td></tr>
164 <tr class="memdesc:ga4929aab257781dcaae7197f917991779"><td class="mdescLeft">&#160;</td><td class="mdescRight">Listen for socket connections.  <br /></td></tr>
165 <tr class="separator:ga4929aab257781dcaae7197f917991779"><td class="memSeparator" colspan="2">&#160;</td></tr>
166 <tr class="memitem:ga24e6a015e519373c3f108cc5aa764ef8"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga24e6a015e519373c3f108cc5aa764ef8">ARM_WIFI_SocketAccept</a> (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port)</td></tr>
167 <tr class="memdesc:ga24e6a015e519373c3f108cc5aa764ef8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Accept a new connection on a socket.  <br /></td></tr>
168 <tr class="separator:ga24e6a015e519373c3f108cc5aa764ef8"><td class="memSeparator" colspan="2">&#160;</td></tr>
169 <tr class="memitem:gac0f189afbd35914d4c85e77b40672b16"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gac0f189afbd35914d4c85e77b40672b16">ARM_WIFI_SocketConnect</a> (int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port)</td></tr>
170 <tr class="memdesc:gac0f189afbd35914d4c85e77b40672b16"><td class="mdescLeft">&#160;</td><td class="mdescRight">Connect a socket to a remote host.  <br /></td></tr>
171 <tr class="separator:gac0f189afbd35914d4c85e77b40672b16"><td class="memSeparator" colspan="2">&#160;</td></tr>
172 <tr class="memitem:gaecc9ba19491ed00c27da3f5677895d48"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gaecc9ba19491ed00c27da3f5677895d48">ARM_WIFI_SocketRecv</a> (int32_t socket, void *buf, uint32_t len)</td></tr>
173 <tr class="memdesc:gaecc9ba19491ed00c27da3f5677895d48"><td class="mdescLeft">&#160;</td><td class="mdescRight">Receive data or check if data is available on a connected socket.  <br /></td></tr>
174 <tr class="separator:gaecc9ba19491ed00c27da3f5677895d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
175 <tr class="memitem:ga2b15232d69f2ae8e189512d6c68c8a81"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga2b15232d69f2ae8e189512d6c68c8a81">ARM_WIFI_SocketRecvFrom</a> (int32_t socket, void *buf, uint32_t len, uint8_t *ip, uint32_t *ip_len, uint16_t *port)</td></tr>
176 <tr class="memdesc:ga2b15232d69f2ae8e189512d6c68c8a81"><td class="mdescLeft">&#160;</td><td class="mdescRight">Receive data or check if data is available on a socket.  <br /></td></tr>
177 <tr class="separator:ga2b15232d69f2ae8e189512d6c68c8a81"><td class="memSeparator" colspan="2">&#160;</td></tr>
178 <tr class="memitem:gaee8615b026e8525fb21ca45ba3778ac8"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gaee8615b026e8525fb21ca45ba3778ac8">ARM_WIFI_SocketSend</a> (int32_t socket, const void *buf, uint32_t len)</td></tr>
179 <tr class="memdesc:gaee8615b026e8525fb21ca45ba3778ac8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Send data or check if data can be sent on a connected socket.  <br /></td></tr>
180 <tr class="separator:gaee8615b026e8525fb21ca45ba3778ac8"><td class="memSeparator" colspan="2">&#160;</td></tr>
181 <tr class="memitem:ga5ddd3dd5f863b8392e4281dd48a28d28"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga5ddd3dd5f863b8392e4281dd48a28d28">ARM_WIFI_SocketSendTo</a> (int32_t socket, const void *buf, uint32_t len, const uint8_t *ip, uint32_t ip_len, uint16_t port)</td></tr>
182 <tr class="memdesc:ga5ddd3dd5f863b8392e4281dd48a28d28"><td class="mdescLeft">&#160;</td><td class="mdescRight">Send data or check if data can be sent on a socket.  <br /></td></tr>
183 <tr class="separator:ga5ddd3dd5f863b8392e4281dd48a28d28"><td class="memSeparator" colspan="2">&#160;</td></tr>
184 <tr class="memitem:gac187e418893de33817e4fcbdd85dbaee"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gac187e418893de33817e4fcbdd85dbaee">ARM_WIFI_SocketGetSockName</a> (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port)</td></tr>
185 <tr class="memdesc:gac187e418893de33817e4fcbdd85dbaee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve local IP address and port of a socket.  <br /></td></tr>
186 <tr class="separator:gac187e418893de33817e4fcbdd85dbaee"><td class="memSeparator" colspan="2">&#160;</td></tr>
187 <tr class="memitem:gaa484a931d55d163477920bc865dd9220"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gaa484a931d55d163477920bc865dd9220">ARM_WIFI_SocketGetPeerName</a> (int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port)</td></tr>
188 <tr class="memdesc:gaa484a931d55d163477920bc865dd9220"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve remote IP address and port of a socket.  <br /></td></tr>
189 <tr class="separator:gaa484a931d55d163477920bc865dd9220"><td class="memSeparator" colspan="2">&#160;</td></tr>
190 <tr class="memitem:ga6d69360e9774937b7bdc03b45fbc9075"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga6d69360e9774937b7bdc03b45fbc9075">ARM_WIFI_SocketGetOpt</a> (int32_t socket, int32_t opt_id, void *opt_val, uint32_t *opt_len)</td></tr>
191 <tr class="memdesc:ga6d69360e9774937b7bdc03b45fbc9075"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get socket option.  <br /></td></tr>
192 <tr class="separator:ga6d69360e9774937b7bdc03b45fbc9075"><td class="memSeparator" colspan="2">&#160;</td></tr>
193 <tr class="memitem:ga5de80d6729d9504a21dd5d31dc504017"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga5de80d6729d9504a21dd5d31dc504017">ARM_WIFI_SocketSetOpt</a> (int32_t socket, int32_t opt_id, const void *opt_val, uint32_t opt_len)</td></tr>
194 <tr class="memdesc:ga5de80d6729d9504a21dd5d31dc504017"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set socket option.  <br /></td></tr>
195 <tr class="separator:ga5de80d6729d9504a21dd5d31dc504017"><td class="memSeparator" colspan="2">&#160;</td></tr>
196 <tr class="memitem:ga391464de71b6a5d300fda9434fe87a87"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga391464de71b6a5d300fda9434fe87a87">ARM_WIFI_SocketClose</a> (int32_t socket)</td></tr>
197 <tr class="memdesc:ga391464de71b6a5d300fda9434fe87a87"><td class="mdescLeft">&#160;</td><td class="mdescRight">Close and release a socket.  <br /></td></tr>
198 <tr class="separator:ga391464de71b6a5d300fda9434fe87a87"><td class="memSeparator" colspan="2">&#160;</td></tr>
199 <tr class="memitem:ga0c37435c6abc68ee0f1f4357b503e0bf"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#ga0c37435c6abc68ee0f1f4357b503e0bf">ARM_WIFI_SocketGetHostByName</a> (const char *name, int32_t af, uint8_t *ip, uint32_t *ip_len)</td></tr>
200 <tr class="memdesc:ga0c37435c6abc68ee0f1f4357b503e0bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retrieve host IP address from host name.  <br /></td></tr>
201 <tr class="separator:ga0c37435c6abc68ee0f1f4357b503e0bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
202 <tr class="memitem:gac7a8abb9e23f3f52dabce4153a53c1ca"><td class="memItemLeft" align="right" valign="top">int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wifi__socket__gr.html#gac7a8abb9e23f3f52dabce4153a53c1ca">ARM_WIFI_Ping</a> (const uint8_t *ip, uint32_t ip_len)</td></tr>
203 <tr class="memdesc:gac7a8abb9e23f3f52dabce4153a53c1ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Probe remote host with Ping command.  <br /></td></tr>
204 <tr class="separator:gac7a8abb9e23f3f52dabce4153a53c1ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
205 </table>
206 <a name="details" id="details"></a><h2 class="groupheader">Description</h2>
207 <p>Socket interface to IP stack running on WiFi module. </p>
208 <p>The <a class="el" href="group__wifi__socket__gr.html">WiFi Socket</a> functions provide the interface to an IP stack that is running on the WiFi module. This IP stack handles data communication with the network and provides the user with a communication endpoint called sockets. </p>
209 <h2 class="groupheader">Function Documentation</h2>
210 <a id="ga1433b297315ab394f1544a18548ffcc6" name="ga1433b297315ab394f1544a18548ffcc6"></a>
211 <h2 class="memtitle"><span class="permalink"><a href="#ga1433b297315ab394f1544a18548ffcc6">&#9670;&#160;</a></span>ARM_WIFI_SocketCreate()</h2>
212
213 <div class="memitem">
214 <div class="memproto">
215       <table class="memname">
216         <tr>
217           <td class="memname">int32_t ARM_WIFI_SocketCreate </td>
218           <td>(</td>
219           <td class="paramtype">int32_t&#160;</td>
220           <td class="paramname"><em>af</em>, </td>
221         </tr>
222         <tr>
223           <td class="paramkey"></td>
224           <td></td>
225           <td class="paramtype">int32_t&#160;</td>
226           <td class="paramname"><em>type</em>, </td>
227         </tr>
228         <tr>
229           <td class="paramkey"></td>
230           <td></td>
231           <td class="paramtype">int32_t&#160;</td>
232           <td class="paramname"><em>protocol</em>&#160;</td>
233         </tr>
234         <tr>
235           <td></td>
236           <td>)</td>
237           <td></td><td></td>
238         </tr>
239       </table>
240 </div><div class="memdoc">
241
242 <p>Create a communication socket. </p>
243 <dl class="params"><dt>Parameters</dt><dd>
244   <table class="params">
245     <tr><td class="paramdir">[in]</td><td class="paramname">af</td><td>Address family </td></tr>
246     <tr><td class="paramdir">[in]</td><td class="paramname">type</td><td>Socket type </td></tr>
247     <tr><td class="paramdir">[in]</td><td class="paramname">protocol</td><td>Socket protocol </td></tr>
248   </table>
249   </dd>
250 </dl>
251 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
252 <li>Socket identification number (&gt;=0)</li>
253 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument</li>
254 <li><a class="el" href="group__wifi__soc__func.html#ga95ab80319bfbc5413fc5334e3d5ce5d2">ARM_SOCKET_ENOTSUP</a> : Operation not supported</li>
255 <li><a class="el" href="group__wifi__soc__func.html#ga68e88e80822f779361407d005659fc6c">ARM_SOCKET_ENOMEM</a> : Not enough memory</li>
256 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
257 </ul>
258 </dd></dl>
259 <p>The function <b>ARM_WIFI_SocketCreate</b> creates a communication endpoint called a socket.</p>
260 <p>The argument <em>af</em> specifies the address family. The following values are supported: </p><table class="markdownTable">
261 <tr class="markdownTableHead">
262 <th class="markdownTableHeadLeft">Family   </th><th class="markdownTableHeadLeft">Description    </th></tr>
263 <tr class="markdownTableRowOdd">
264 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a>   </td><td class="markdownTableBodyLeft">Address Family Internet    </td></tr>
265 <tr class="markdownTableRowEven">
266 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__addr__family.html#gad50c95421ffbc6eec5f8458b2e170c26">ARM_SOCKET_AF_INET6</a>   </td><td class="markdownTableBodyLeft">Address Family Internet version 6   </td></tr>
267 </table>
268 <p>The argument <em>type</em> specifies the communication semantics. The following are the currently supported types: </p><table class="markdownTable">
269 <tr class="markdownTableHead">
270 <th class="markdownTableHeadLeft">Type   </th><th class="markdownTableHeadLeft">Description    </th></tr>
271 <tr class="markdownTableRowOdd">
272 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__socket__type.html#ga9567d5735856190b2ae9cc39f68637f1">ARM_SOCKET_SOCK_STREAM</a>   </td><td class="markdownTableBodyLeft">Provides a reliable connection based data stream that is full-duplex    </td></tr>
273 <tr class="markdownTableRowEven">
274 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__socket__type.html#gaced5f33eda2fc38a8303cd11a0d76fab">ARM_SOCKET_SOCK_DGRAM</a>   </td><td class="markdownTableBodyLeft">Provides connectionless communication that is unreliable   </td></tr>
275 </table>
276 <p>The argument <em>protocol</em> specifies the protocol that must be used with the socket type: </p><table class="markdownTable">
277 <tr class="markdownTableHead">
278 <th class="markdownTableHeadLeft">Protocol   </th><th class="markdownTableHeadLeft">Description    </th></tr>
279 <tr class="markdownTableRowOdd">
280 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__protocol.html#gaf07cfcf1b65ea6c6be0629459a2ba781">ARM_SOCKET_IPPROTO_TCP</a>   </td><td class="markdownTableBodyLeft">Must be used with ARM_SOCKET_SOCK_STREAM socket type    </td></tr>
281 <tr class="markdownTableRowEven">
282 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__protocol.html#gabacbead83c772f5737b25b4fc390e16d">ARM_SOCKET_IPPROTO_UDP</a>   </td><td class="markdownTableBodyLeft">Must be used with ARM_SOCKET_SOCK_DGRAM socket type    </td></tr>
283 <tr class="markdownTableRowOdd">
284 <td class="markdownTableBodyLeft"><span class="XML-Token">0</span>   </td><td class="markdownTableBodyLeft">The system selects a matching protocol for the socket type   </td></tr>
285 </table>
286 <p><b>Example:</b> </p><ul>
287 <li>see <a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a>, <a class="el" href="group__wifi__socket__gr.html#gac0f189afbd35914d4c85e77b40672b16">ARM_WIFI_SocketConnect</a> </li>
288 </ul>
289
290 </div>
291 </div>
292 <a id="gae69f7822b658765f1cd3f74e9a50c246" name="gae69f7822b658765f1cd3f74e9a50c246"></a>
293 <h2 class="memtitle"><span class="permalink"><a href="#gae69f7822b658765f1cd3f74e9a50c246">&#9670;&#160;</a></span>ARM_WIFI_SocketBind()</h2>
294
295 <div class="memitem">
296 <div class="memproto">
297       <table class="memname">
298         <tr>
299           <td class="memname">int32_t ARM_WIFI_SocketBind </td>
300           <td>(</td>
301           <td class="paramtype">int32_t&#160;</td>
302           <td class="paramname"><em>socket</em>, </td>
303         </tr>
304         <tr>
305           <td class="paramkey"></td>
306           <td></td>
307           <td class="paramtype">const uint8_t *&#160;</td>
308           <td class="paramname"><em>ip</em>, </td>
309         </tr>
310         <tr>
311           <td class="paramkey"></td>
312           <td></td>
313           <td class="paramtype">uint32_t&#160;</td>
314           <td class="paramname"><em>ip_len</em>, </td>
315         </tr>
316         <tr>
317           <td class="paramkey"></td>
318           <td></td>
319           <td class="paramtype">uint16_t&#160;</td>
320           <td class="paramname"><em>port</em>&#160;</td>
321         </tr>
322         <tr>
323           <td></td>
324           <td>)</td>
325           <td></td><td></td>
326         </tr>
327       </table>
328 </div><div class="memdoc">
329
330 <p>Assign a local address to a socket. </p>
331 <dl class="params"><dt>Parameters</dt><dd>
332   <table class="params">
333     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
334     <tr><td class="paramdir">[in]</td><td class="paramname">ip</td><td>Pointer to local IP address </td></tr>
335     <tr><td class="paramdir">[in]</td><td class="paramname">ip_len</td><td>Length of 'ip' address in bytes </td></tr>
336     <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>Local port number </td></tr>
337   </table>
338   </dd>
339 </dl>
340 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
341 <li>0 : Operation successful</li>
342 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
343 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (address or socket already bound)</li>
344 <li><a class="el" href="group__wifi__soc__func.html#ga4fa475e41c3db0ada798249696e745a1">ARM_SOCKET_EADDRINUSE</a> : Address already in use</li>
345 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
346 </ul>
347 </dd></dl>
348 <p>The function <b>ARM_WIFI_SocketBind</b> assigns a name to an unnamed socket. The name represents the local address and port of the communication endpoint.</p>
349 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
350 <p>The argument <em>ip</em> is a pointer to the buffer containing the IP address octets of the local IP address.</p>
351 <p>The argument <em>ip_len</em> specifies the length of the local IP address. The length is <span class="XML-Token">4</span> bytes for the IPv4 address and <span class="XML-Token">16</span> bytes for the IPv6 address.</p>
352 <p>The argument <em>port</em> specifies the local port. If the argument <em>port</em> is <span class="XML-Token">0</span>, the function returns error, because this port is reserved.</p>
353 <p><b>Example:</b> </p><ul>
354 <li>see <a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a> </li>
355 </ul>
356
357 </div>
358 </div>
359 <a id="ga4929aab257781dcaae7197f917991779" name="ga4929aab257781dcaae7197f917991779"></a>
360 <h2 class="memtitle"><span class="permalink"><a href="#ga4929aab257781dcaae7197f917991779">&#9670;&#160;</a></span>ARM_WIFI_SocketListen()</h2>
361
362 <div class="memitem">
363 <div class="memproto">
364       <table class="memname">
365         <tr>
366           <td class="memname">int32_t ARM_WIFI_SocketListen </td>
367           <td>(</td>
368           <td class="paramtype">int32_t&#160;</td>
369           <td class="paramname"><em>socket</em>, </td>
370         </tr>
371         <tr>
372           <td class="paramkey"></td>
373           <td></td>
374           <td class="paramtype">int32_t&#160;</td>
375           <td class="paramname"><em>backlog</em>&#160;</td>
376         </tr>
377         <tr>
378           <td></td>
379           <td>)</td>
380           <td></td><td></td>
381         </tr>
382       </table>
383 </div><div class="memdoc">
384
385 <p>Listen for socket connections. </p>
386 <dl class="params"><dt>Parameters</dt><dd>
387   <table class="params">
388     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
389     <tr><td class="paramdir">[in]</td><td class="paramname">backlog</td><td>Number of connection requests that can be queued </td></tr>
390   </table>
391   </dd>
392 </dl>
393 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
394 <li>0 : Operation successful</li>
395 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
396 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (socket not bound)</li>
397 <li><a class="el" href="group__wifi__soc__func.html#ga95ab80319bfbc5413fc5334e3d5ce5d2">ARM_SOCKET_ENOTSUP</a> : Operation not supported</li>
398 <li><a class="el" href="group__wifi__soc__func.html#gaa1e456c6cea2f6579158818387557f1a">ARM_SOCKET_EISCONN</a> : Socket is already connected</li>
399 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
400 </ul>
401 </dd></dl>
402 <p>The function <b>ARM_WIFI_SocketListen</b> sets the specified socket to listening mode, that is to the server mode of operation. Before calling the <b>ARM_WIFI_SocketListen</b> function, the <a class="el" href="group__wifi__socket__gr.html#gae69f7822b658765f1cd3f74e9a50c246">ARM_WIFI_SocketBind</a> function must be called.</p>
403 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
404 <p>The argument <em>backlog</em> specifies a maximum number of connection requests that can be queued.</p>
405 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> Driver_WiFi0;</div>
406 <div class="line"><span class="keyword">static</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> *wifi;</div>
407 <div class="line"> </div>
408 <div class="line"><span class="keywordtype">void</span> Echo_Server_Thread (<span class="keywordtype">void</span> *arg) {</div>
409 <div class="line">  uint8_t ip[4] = { 0U, 0U, 0U, 0U };</div>
410 <div class="line">  int32_t sock, sd, res;</div>
411 <div class="line">  <span class="keywordtype">char</span> dbuf[120];</div>
412 <div class="line"> </div>
413 <div class="line">  <span class="keywordflow">while</span> (1) {</div>
414 <div class="line">    wifi = &amp;Driver_WiFi0;</div>
415 <div class="line">    sock = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a9e5629f415de14f3e5634aa2627414a2">SocketCreate</a> (<a class="code hl_define" href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a>, <a class="code hl_define" href="group__wifi__socket__type.html#ga9567d5735856190b2ae9cc39f68637f1">ARM_SOCKET_SOCK_STREAM</a>, <a class="code hl_define" href="group__wifi__protocol.html#gaf07cfcf1b65ea6c6be0629459a2ba781">ARM_SOCKET_IPPROTO_TCP</a>);</div>
416 <div class="line"> </div>
417 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#ae6af9f88caa98307fb4f3205a6be61c4">SocketBind</a> (sock, (uint8_t *)ip, <span class="keyword">sizeof</span>(ip), 7U);</div>
418 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#aa4ccbcdedaf0472fcd1232612bd5bbb4">SocketListen</a> (sock, 1);</div>
419 <div class="line">    sd = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a44e72ec8246833102a4b159e3d727a39">SocketAccept</a> (sock, NULL, NULL, NULL);</div>
420 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a377a2e62f3f10140256617b533995c12">SocketClose</a> (sock);</div>
421 <div class="line">    sock = sd;</div>
422 <div class="line"> </div>
423 <div class="line">    <span class="keywordflow">while</span> (1) {</div>
424 <div class="line">      res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a12c663a9fbc7b750c3bc2d63869b6d5f">SocketRecv</a> (sock, dbuf, <span class="keyword">sizeof</span>(dbuf));</div>
425 <div class="line">      <span class="keywordflow">if</span> (res &lt; 0) {</div>
426 <div class="line">        <span class="keywordflow">break</span>;                                      <span class="comment">// Error occurred</span></div>
427 <div class="line">      }</div>
428 <div class="line">      <span class="keywordflow">if</span> (res &gt; 0) {</div>
429 <div class="line">        wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a637ecce0db75764a729432a27246af1b">SocketSend</a> (sock, dbuf, res);         <span class="comment">// Echo the data</span></div>
430 <div class="line">      }</div>
431 <div class="line">    }</div>
432 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a377a2e62f3f10140256617b533995c12">SocketClose</a> (sock);</div>
433 <div class="line">  }</div>
434 <div class="line">}</div>
435 <div class="ttc" id="agroup__wifi__addr__family_html_ga1a17023d92374b4f2d963aa7ac1c4e17"><div class="ttname"><a href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a></div><div class="ttdeci">#define ARM_SOCKET_AF_INET</div><div class="ttdoc">IPv4.</div></div>
436 <div class="ttc" id="agroup__wifi__interface__gr_html_a12c663a9fbc7b750c3bc2d63869b6d5f"><div class="ttname"><a href="group__wifi__interface__gr.html#a12c663a9fbc7b750c3bc2d63869b6d5f">ARM_DRIVER_WIFI::SocketRecv</a></div><div class="ttdeci">int32_t(* SocketRecv)(int32_t socket, void *buf, uint32_t len)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:649</div></div>
437 <div class="ttc" id="agroup__wifi__interface__gr_html_a377a2e62f3f10140256617b533995c12"><div class="ttname"><a href="group__wifi__interface__gr.html#a377a2e62f3f10140256617b533995c12">ARM_DRIVER_WIFI::SocketClose</a></div><div class="ttdeci">int32_t(* SocketClose)(int32_t socket)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:657</div></div>
438 <div class="ttc" id="agroup__wifi__interface__gr_html_a44e72ec8246833102a4b159e3d727a39"><div class="ttname"><a href="group__wifi__interface__gr.html#a44e72ec8246833102a4b159e3d727a39">ARM_DRIVER_WIFI::SocketAccept</a></div><div class="ttdeci">int32_t(* SocketAccept)(int32_t socket, uint8_t *ip, uint32_t *ip_len, uint16_t *port)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:647</div></div>
439 <div class="ttc" id="agroup__wifi__interface__gr_html_a637ecce0db75764a729432a27246af1b"><div class="ttname"><a href="group__wifi__interface__gr.html#a637ecce0db75764a729432a27246af1b">ARM_DRIVER_WIFI::SocketSend</a></div><div class="ttdeci">int32_t(* SocketSend)(int32_t socket, const void *buf, uint32_t len)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:651</div></div>
440 <div class="ttc" id="agroup__wifi__interface__gr_html_a9e5629f415de14f3e5634aa2627414a2"><div class="ttname"><a href="group__wifi__interface__gr.html#a9e5629f415de14f3e5634aa2627414a2">ARM_DRIVER_WIFI::SocketCreate</a></div><div class="ttdeci">int32_t(* SocketCreate)(int32_t af, int32_t type, int32_t protocol)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:644</div></div>
441 <div class="ttc" id="agroup__wifi__interface__gr_html_aa4ccbcdedaf0472fcd1232612bd5bbb4"><div class="ttname"><a href="group__wifi__interface__gr.html#aa4ccbcdedaf0472fcd1232612bd5bbb4">ARM_DRIVER_WIFI::SocketListen</a></div><div class="ttdeci">int32_t(* SocketListen)(int32_t socket, int32_t backlog)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:646</div></div>
442 <div class="ttc" id="agroup__wifi__interface__gr_html_ae6af9f88caa98307fb4f3205a6be61c4"><div class="ttname"><a href="group__wifi__interface__gr.html#ae6af9f88caa98307fb4f3205a6be61c4">ARM_DRIVER_WIFI::SocketBind</a></div><div class="ttdeci">int32_t(* SocketBind)(int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:645</div></div>
443 <div class="ttc" id="agroup__wifi__interface__gr_html_structARM__DRIVER__WIFI"><div class="ttname"><a href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a></div><div class="ttdoc">Access structure of the WiFi Driver.</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:626</div></div>
444 <div class="ttc" id="agroup__wifi__protocol_html_gaf07cfcf1b65ea6c6be0629459a2ba781"><div class="ttname"><a href="group__wifi__protocol.html#gaf07cfcf1b65ea6c6be0629459a2ba781">ARM_SOCKET_IPPROTO_TCP</a></div><div class="ttdeci">#define ARM_SOCKET_IPPROTO_TCP</div><div class="ttdoc">TCP.</div></div>
445 <div class="ttc" id="agroup__wifi__socket__type_html_ga9567d5735856190b2ae9cc39f68637f1"><div class="ttname"><a href="group__wifi__socket__type.html#ga9567d5735856190b2ae9cc39f68637f1">ARM_SOCKET_SOCK_STREAM</a></div><div class="ttdeci">#define ARM_SOCKET_SOCK_STREAM</div><div class="ttdoc">Stream socket.</div></div>
446 </div><!-- fragment --> 
447 </div>
448 </div>
449 <a id="ga24e6a015e519373c3f108cc5aa764ef8" name="ga24e6a015e519373c3f108cc5aa764ef8"></a>
450 <h2 class="memtitle"><span class="permalink"><a href="#ga24e6a015e519373c3f108cc5aa764ef8">&#9670;&#160;</a></span>ARM_WIFI_SocketAccept()</h2>
451
452 <div class="memitem">
453 <div class="memproto">
454       <table class="memname">
455         <tr>
456           <td class="memname">int32_t ARM_WIFI_SocketAccept </td>
457           <td>(</td>
458           <td class="paramtype">int32_t&#160;</td>
459           <td class="paramname"><em>socket</em>, </td>
460         </tr>
461         <tr>
462           <td class="paramkey"></td>
463           <td></td>
464           <td class="paramtype">uint8_t *&#160;</td>
465           <td class="paramname"><em>ip</em>, </td>
466         </tr>
467         <tr>
468           <td class="paramkey"></td>
469           <td></td>
470           <td class="paramtype">uint32_t *&#160;</td>
471           <td class="paramname"><em>ip_len</em>, </td>
472         </tr>
473         <tr>
474           <td class="paramkey"></td>
475           <td></td>
476           <td class="paramtype">uint16_t *&#160;</td>
477           <td class="paramname"><em>port</em>&#160;</td>
478         </tr>
479         <tr>
480           <td></td>
481           <td>)</td>
482           <td></td><td></td>
483         </tr>
484       </table>
485 </div><div class="memdoc">
486
487 <p>Accept a new connection on a socket. </p>
488 <dl class="params"><dt>Parameters</dt><dd>
489   <table class="params">
490     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
491     <tr><td class="paramdir">[out]</td><td class="paramname">ip</td><td>Pointer to buffer where address of connecting socket shall be returned (NULL for none) </td></tr>
492     <tr><td class="paramdir">[in,out]</td><td class="paramname">ip_len</td><td>Pointer to length of 'ip' (or NULL if 'ip' is NULL)<ul>
493 <li>length of supplied 'ip' on input</li>
494 <li>length of stored 'ip' on output </li>
495 </ul>
496 </td></tr>
497     <tr><td class="paramdir">[out]</td><td class="paramname">port</td><td>Pointer to buffer where port of connecting socket shall be returned (NULL for none) </td></tr>
498   </table>
499   </dd>
500 </dl>
501 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
502 <li>socket identification number of accepted socket (&gt;=0)</li>
503 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
504 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (socket not in listen mode)</li>
505 <li><a class="el" href="group__wifi__soc__func.html#ga95ab80319bfbc5413fc5334e3d5ce5d2">ARM_SOCKET_ENOTSUP</a> : Operation not supported (socket type does not support accepting connections)</li>
506 <li><a class="el" href="group__wifi__soc__func.html#ga87fa238861921ba1b272019a83b04676">ARM_SOCKET_ECONNRESET</a> : Connection reset by the peer</li>
507 <li><a class="el" href="group__wifi__soc__func.html#ga7e64d6bd00a2f6e30ece3ff0f02b5b27">ARM_SOCKET_ECONNABORTED</a> : Connection aborted locally</li>
508 <li><a class="el" href="group__wifi__soc__func.html#ga699dbd55e543fd38d333cf1d4470d8db">ARM_SOCKET_EAGAIN</a> : Operation would block or timed out (may be called again)</li>
509 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
510 </ul>
511 </dd></dl>
512 <p>The function <b>ARM_WIFI_SocketAccept</b> accepts a connection request queued for a listening socket. If a connection request is pending, <b>ARM_WIFI_SocketAccept</b> removes the request from the queue, and creates a new socket for the connection. The original listening socket remains open and continues to queue new connection requests. The <em>socket</em> must be a socket of type <b>ARM_SOCKET_SOCK_STREAM</b>.</p>
513 <p>In blocking mode, which is enabled by default, this function waits for a connection request. In non blocking mode, you must call the <b>ARM_WIFI_SocketAccept</b> function again if the error code <code>ARM_SOCKET_EAGAIN</code> is returned.</p>
514 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
515 <p>The argument <em>ip</em> is a pointer to the buffer that will receive the IP address of the connection node. If the <em>ip</em> is <span class="XML-Token">NULL</span>, the IP address is not returned.</p>
516 <p>The argument <em>ip_len</em> is a pointer to the IP address length. It should initially contain the amount of space pointed to by <em>ip</em>. On return it contains the actual length of the address returned in bytes.</p>
517 <p>The argument <em>port</em> is a pointer to the buffer, that will receive the port number of the connection node. If the <em>port</em> is <span class="XML-Token">NULL</span>, the port number is not returned.</p>
518 <p><b>Example:</b> </p><ul>
519 <li>see <a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a> </li>
520 </ul>
521
522 </div>
523 </div>
524 <a id="gac0f189afbd35914d4c85e77b40672b16" name="gac0f189afbd35914d4c85e77b40672b16"></a>
525 <h2 class="memtitle"><span class="permalink"><a href="#gac0f189afbd35914d4c85e77b40672b16">&#9670;&#160;</a></span>ARM_WIFI_SocketConnect()</h2>
526
527 <div class="memitem">
528 <div class="memproto">
529       <table class="memname">
530         <tr>
531           <td class="memname">int32_t ARM_WIFI_SocketConnect </td>
532           <td>(</td>
533           <td class="paramtype">int32_t&#160;</td>
534           <td class="paramname"><em>socket</em>, </td>
535         </tr>
536         <tr>
537           <td class="paramkey"></td>
538           <td></td>
539           <td class="paramtype">const uint8_t *&#160;</td>
540           <td class="paramname"><em>ip</em>, </td>
541         </tr>
542         <tr>
543           <td class="paramkey"></td>
544           <td></td>
545           <td class="paramtype">uint32_t&#160;</td>
546           <td class="paramname"><em>ip_len</em>, </td>
547         </tr>
548         <tr>
549           <td class="paramkey"></td>
550           <td></td>
551           <td class="paramtype">uint16_t&#160;</td>
552           <td class="paramname"><em>port</em>&#160;</td>
553         </tr>
554         <tr>
555           <td></td>
556           <td>)</td>
557           <td></td><td></td>
558         </tr>
559       </table>
560 </div><div class="memdoc">
561
562 <p>Connect a socket to a remote host. </p>
563 <dl class="params"><dt>Parameters</dt><dd>
564   <table class="params">
565     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
566     <tr><td class="paramdir">[in]</td><td class="paramname">ip</td><td>Pointer to remote IP address </td></tr>
567     <tr><td class="paramdir">[in]</td><td class="paramname">ip_len</td><td>Length of 'ip' address in bytes </td></tr>
568     <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>Remote port number </td></tr>
569   </table>
570   </dd>
571 </dl>
572 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
573 <li>0 : Operation successful</li>
574 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
575 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument</li>
576 <li><a class="el" href="group__wifi__soc__func.html#ga9df0d5bd422102d9d4ebddc869d358e0">ARM_SOCKET_EALREADY</a> : Connection already in progress</li>
577 <li><a class="el" href="group__wifi__soc__func.html#gad7f3e077f7721a202012378ddcefb83f">ARM_SOCKET_EINPROGRESS</a> : Operation in progress</li>
578 <li><a class="el" href="group__wifi__soc__func.html#gaa1e456c6cea2f6579158818387557f1a">ARM_SOCKET_EISCONN</a> : Socket is connected</li>
579 <li><a class="el" href="group__wifi__soc__func.html#gaaf535c9d325172ff8ef02964af218cb0">ARM_SOCKET_ECONNREFUSED</a> : Connection rejected by the peer</li>
580 <li><a class="el" href="group__wifi__soc__func.html#ga7e64d6bd00a2f6e30ece3ff0f02b5b27">ARM_SOCKET_ECONNABORTED</a> : Connection aborted locally</li>
581 <li><a class="el" href="group__wifi__soc__func.html#ga4fa475e41c3db0ada798249696e745a1">ARM_SOCKET_EADDRINUSE</a> : Address already in use</li>
582 <li><a class="el" href="group__wifi__soc__func.html#ga320ffeeb44d583c0216b24d6e1009d9f">ARM_SOCKET_ETIMEDOUT</a> : Operation timed out</li>
583 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
584 </ul>
585 </dd></dl>
586 <p>The function <b>ARM_WIFI_SocketConnect</b> assigns the address of the peer communication endpoint. The function behaves differently according to the type of socket:</p>
587 <ul>
588 <li><p class="startli"><b>ARM_SOCKET_SOCK_STREAM:</b> A connection is established between the endpoints.</p>
589 <p class="startli">In blocking mode, which is enabled by default, this function waits for a connection to be established.</p>
590 <p class="startli">In non blocking mode, the function returns the error code <code>ARM_SOCKET_EINPROGRESS</code> and the connection is established asynchronously. Subsequent calls to <b>ARM_WIFI_SocketConnect</b> for the same socket, before the connection is established, return the error code <code>ARM_SOCKET_EALREADY</code>. When the connection is established, the call to <b>ARM_WIFI_SocketConnect</b> returns the error code <code>ARM_SOCKET_EISCONN</code>.</p>
591 </li>
592 <li><p class="startli"><b>ARM_SOCKET_SOCK_DGRAM:</b> An address filter is established between the endpoints.</p>
593 <p class="startli">The address filter is changed with another <b>ARM_WIFI_SocketConnect</b> function call. If the socket is not yet bound, the system implicitly binds to a random dynamic port.</p>
594 </li>
595 </ul>
596 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
597 <p>The argument <em>ip</em> is a pointer to the buffer containing the IP address octets of the endpoint node.</p>
598 <p>The argument <em>ip_len</em> specifies the length of the IP address. The length is <span class="XML-Token">4</span> bytes for the IPv4 address and <span class="XML-Token">16</span> bytes for the IPv6 address.</p>
599 <p>The argument <em>port</em> specifies the port of the endpoint node. If the argument <em>port</em> is <span class="XML-Token">0</span>, the function returns error, because this port is reserved.</p>
600 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> Driver_WiFi0;</div>
601 <div class="line"><span class="keyword">static</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> *wifi;</div>
602 <div class="line"> </div>
603 <div class="line"><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> message[] = { <span class="stringliteral">&quot;The quick brown fox jumps over the lazy dog.&quot;</span> };</div>
604 <div class="line">  </div>
605 <div class="line"><span class="keywordtype">void</span> Echo_Client_Thread (<span class="keywordtype">void</span> *arg) {</div>
606 <div class="line">  uint8_t ip[4] = { 192U, 168U, 0U, 100U };</div>
607 <div class="line">  int32_t sock, res;</div>
608 <div class="line">  <span class="keywordtype">char</span> dbuf[120];</div>
609 <div class="line"> </div>
610 <div class="line">  <span class="keywordflow">while</span> (1) {</div>
611 <div class="line">    wifi = &amp;Driver_WiFi0;</div>
612 <div class="line">    sock = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a9e5629f415de14f3e5634aa2627414a2">SocketCreate</a> (<a class="code hl_define" href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a>, <a class="code hl_define" href="group__wifi__socket__type.html#ga9567d5735856190b2ae9cc39f68637f1">ARM_SOCKET_SOCK_STREAM</a>, <a class="code hl_define" href="group__wifi__protocol.html#gaf07cfcf1b65ea6c6be0629459a2ba781">ARM_SOCKET_IPPROTO_TCP</a>);</div>
613 <div class="line"> </div>
614 <div class="line">    res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#ae24f3fc47eea0c28188134b301f1a63c">SocketConnect</a> (sock, (uint8_t *)ip, <span class="keyword">sizeof</span>(ip), 7U);</div>
615 <div class="line">    <span class="keywordflow">if</span> (res == 0) {</div>
616 <div class="line">      wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a637ecce0db75764a729432a27246af1b">SocketSend</a> (sock, message, <span class="keyword">sizeof</span>(message));</div>
617 <div class="line">      res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a12c663a9fbc7b750c3bc2d63869b6d5f">SocketRecv</a> (sock, dbuf, <span class="keyword">sizeof</span>(dbuf));</div>
618 <div class="line">      <span class="keywordflow">if</span> (res &lt; 0) {</div>
619 <div class="line">        <span class="keywordflow">break</span>;               <span class="comment">// Error occurred</span></div>
620 <div class="line">      }</div>
621 <div class="line">      <span class="keywordflow">if</span> (res &gt; 0) {</div>
622 <div class="line">        <span class="keywordflow">if</span> (memcmp (dbuf, message, res) != 0) {</div>
623 <div class="line">          <span class="comment">// error handling, message is not the same as sent</span></div>
624 <div class="line">        }</div>
625 <div class="line">      }    </div>
626 <div class="line">    }</div>
627 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a377a2e62f3f10140256617b533995c12">SocketClose</a> (sock);</div>
628 <div class="line">    osDelay (1000U);</div>
629 <div class="line">  }</div>
630 <div class="line">}</div>
631 <div class="ttc" id="agroup__wifi__interface__gr_html_ae24f3fc47eea0c28188134b301f1a63c"><div class="ttname"><a href="group__wifi__interface__gr.html#ae24f3fc47eea0c28188134b301f1a63c">ARM_DRIVER_WIFI::SocketConnect</a></div><div class="ttdeci">int32_t(* SocketConnect)(int32_t socket, const uint8_t *ip, uint32_t ip_len, uint16_t port)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:648</div></div>
632 </div><!-- fragment --> 
633 </div>
634 </div>
635 <a id="gaecc9ba19491ed00c27da3f5677895d48" name="gaecc9ba19491ed00c27da3f5677895d48"></a>
636 <h2 class="memtitle"><span class="permalink"><a href="#gaecc9ba19491ed00c27da3f5677895d48">&#9670;&#160;</a></span>ARM_WIFI_SocketRecv()</h2>
637
638 <div class="memitem">
639 <div class="memproto">
640       <table class="memname">
641         <tr>
642           <td class="memname">int32_t ARM_WIFI_SocketRecv </td>
643           <td>(</td>
644           <td class="paramtype">int32_t&#160;</td>
645           <td class="paramname"><em>socket</em>, </td>
646         </tr>
647         <tr>
648           <td class="paramkey"></td>
649           <td></td>
650           <td class="paramtype">void *&#160;</td>
651           <td class="paramname"><em>buf</em>, </td>
652         </tr>
653         <tr>
654           <td class="paramkey"></td>
655           <td></td>
656           <td class="paramtype">uint32_t&#160;</td>
657           <td class="paramname"><em>len</em>&#160;</td>
658         </tr>
659         <tr>
660           <td></td>
661           <td>)</td>
662           <td></td><td></td>
663         </tr>
664       </table>
665 </div><div class="memdoc">
666
667 <p>Receive data or check if data is available on a connected socket. </p>
668 <dl class="params"><dt>Parameters</dt><dd>
669   <table class="params">
670     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
671     <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>Pointer to buffer where data should be stored </td></tr>
672     <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>Length of buffer (in bytes), set len = 0 to check if data is available </td></tr>
673   </table>
674   </dd>
675 </dl>
676 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
677 <li>number of bytes received (&gt;=0), if len != 0</li>
678 <li>0 : Data is available (len = 0)</li>
679 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
680 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (pointer to buffer or length)</li>
681 <li><a class="el" href="group__wifi__soc__func.html#ga0bde95e313d907032074583bc06b24a1">ARM_SOCKET_ENOTCONN</a> : Socket is not connected</li>
682 <li><a class="el" href="group__wifi__soc__func.html#ga87fa238861921ba1b272019a83b04676">ARM_SOCKET_ECONNRESET</a> : Connection reset by the peer</li>
683 <li><a class="el" href="group__wifi__soc__func.html#ga7e64d6bd00a2f6e30ece3ff0f02b5b27">ARM_SOCKET_ECONNABORTED</a> : Connection aborted locally</li>
684 <li><a class="el" href="group__wifi__soc__func.html#ga699dbd55e543fd38d333cf1d4470d8db">ARM_SOCKET_EAGAIN</a> : Operation would block or timed out (may be called again)</li>
685 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
686 </ul>
687 </dd></dl>
688 <p>The function <b>ARM_WIFI_SocketRecv</b> receives incoming data that has been queued for the socket. You can use this function with both, the stream and the datagram socket. It reads as much information as currently available up to the size of the buffer specified.</p>
689 <p>In blocking mode, which is enabled by default, this function waits for received data. In non blocking mode, you must call the <b>ARM_WIFI_SocketRecv</b> function again if the error code <code>ARM_SOCKET_EAGAIN</code> is returned.</p>
690 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
691 <p>The argument <em>buf</em> is a pointer to the application data buffer for storing the data to. If the available data is too large to fit in the supplied application buffer <em>buf</em>, excess bytes are discarded in case of a datagram sockets. For stream sockets, the data is buffered internally so the application can retrieve all data by multiple calls of <b>ARM_WIFI_SocketRecv</b> function.</p>
692 <p>The argument <em>len</em> specifies the size of the application data buffer.</p>
693 <dl class="section note"><dt>Note</dt><dd>The function can also be used to check if the socket has data available to read by specifying <span class="XML-Token">0</span> for argument <em>len</em> (argument <em>buf</em> is ignored). The function returns <span class="XML-Token">0</span> if data is available or error code otherwise. In blocking mode, the function waits until data is available, in non blocking mode the function returns instantly.</dd></dl>
694 <p><b>Example:</b> </p><ul>
695 <li>see <a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a> </li>
696 </ul>
697
698 </div>
699 </div>
700 <a id="ga2b15232d69f2ae8e189512d6c68c8a81" name="ga2b15232d69f2ae8e189512d6c68c8a81"></a>
701 <h2 class="memtitle"><span class="permalink"><a href="#ga2b15232d69f2ae8e189512d6c68c8a81">&#9670;&#160;</a></span>ARM_WIFI_SocketRecvFrom()</h2>
702
703 <div class="memitem">
704 <div class="memproto">
705       <table class="memname">
706         <tr>
707           <td class="memname">int32_t ARM_WIFI_SocketRecvFrom </td>
708           <td>(</td>
709           <td class="paramtype">int32_t&#160;</td>
710           <td class="paramname"><em>socket</em>, </td>
711         </tr>
712         <tr>
713           <td class="paramkey"></td>
714           <td></td>
715           <td class="paramtype">void *&#160;</td>
716           <td class="paramname"><em>buf</em>, </td>
717         </tr>
718         <tr>
719           <td class="paramkey"></td>
720           <td></td>
721           <td class="paramtype">uint32_t&#160;</td>
722           <td class="paramname"><em>len</em>, </td>
723         </tr>
724         <tr>
725           <td class="paramkey"></td>
726           <td></td>
727           <td class="paramtype">uint8_t *&#160;</td>
728           <td class="paramname"><em>ip</em>, </td>
729         </tr>
730         <tr>
731           <td class="paramkey"></td>
732           <td></td>
733           <td class="paramtype">uint32_t *&#160;</td>
734           <td class="paramname"><em>ip_len</em>, </td>
735         </tr>
736         <tr>
737           <td class="paramkey"></td>
738           <td></td>
739           <td class="paramtype">uint16_t *&#160;</td>
740           <td class="paramname"><em>port</em>&#160;</td>
741         </tr>
742         <tr>
743           <td></td>
744           <td>)</td>
745           <td></td><td></td>
746         </tr>
747       </table>
748 </div><div class="memdoc">
749
750 <p>Receive data or check if data is available on a socket. </p>
751 <dl class="params"><dt>Parameters</dt><dd>
752   <table class="params">
753     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
754     <tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>Pointer to buffer where data should be stored </td></tr>
755     <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>Length of buffer (in bytes), set len = 0 to check if data is available </td></tr>
756     <tr><td class="paramdir">[out]</td><td class="paramname">ip</td><td>Pointer to buffer where remote source address shall be returned (NULL for none) </td></tr>
757     <tr><td class="paramdir">[in,out]</td><td class="paramname">ip_len</td><td>Pointer to length of 'ip' (or NULL if 'ip' is NULL)<ul>
758 <li>length of supplied 'ip' on input</li>
759 <li>length of stored 'ip' on output </li>
760 </ul>
761 </td></tr>
762     <tr><td class="paramdir">[out]</td><td class="paramname">port</td><td>Pointer to buffer where remote source port shall be returned (NULL for none) </td></tr>
763   </table>
764   </dd>
765 </dl>
766 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
767 <li>number of bytes received (&gt;=0), if len != 0</li>
768 <li>0 : Data is available (len = 0)</li>
769 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
770 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (pointer to buffer or length)</li>
771 <li><a class="el" href="group__wifi__soc__func.html#ga0bde95e313d907032074583bc06b24a1">ARM_SOCKET_ENOTCONN</a> : Socket is not connected</li>
772 <li><a class="el" href="group__wifi__soc__func.html#ga87fa238861921ba1b272019a83b04676">ARM_SOCKET_ECONNRESET</a> : Connection reset by the peer</li>
773 <li><a class="el" href="group__wifi__soc__func.html#ga7e64d6bd00a2f6e30ece3ff0f02b5b27">ARM_SOCKET_ECONNABORTED</a> : Connection aborted locally</li>
774 <li><a class="el" href="group__wifi__soc__func.html#ga699dbd55e543fd38d333cf1d4470d8db">ARM_SOCKET_EAGAIN</a> : Operation would block or timed out (may be called again)</li>
775 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
776 </ul>
777 </dd></dl>
778 <p>The function <b>ARM_WIFI_SocketRecvFrom</b> is used to receive data that has been queued for a socket. It is normally used to receive messages on datagram sockets, but can also be used to receive a reliable, ordered stream of data on a connected stream sockets. It reads as much information as currently available up to the size of the buffer specified.</p>
779 <p>In blocking mode, which is enabled by default, this function waits for received data. In non blocking mode, you must call the <b>ARM_WIFI_SocketRecv</b> function again if the error code <code>ARM_SOCKET_EAGAIN</code> is returned.</p>
780 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
781 <p>The argument <em>buf</em> is a pointer to the application data buffer for storing the data to. If the available data is too large to fit in the supplied application buffer <em>buf</em>, excess bytes are discarded in case of a datagram sockets. For stream sockets, the data is buffered internally so the application can retrieve all data by multiple calls of <b>ARM_WIFI_SocketRecv</b> function.</p>
782 <p>The argument <em>len</em> specifies the size of the application data buffer.</p>
783 <p>The argument <em>ip</em> is a pointer to the buffer that will receive the IP address of the sender. If the <em>ip</em> is <span class="XML-Token">NULL</span>, the IP address is not returned.</p>
784 <p>The argument <em>ip_len</em> is a pointer to the IP address length. It should initially contain the amount of space pointed to by <em>ip</em>. On return it contains the actual length of the address returned in bytes.</p>
785 <p>The argument <em>port</em> is a pointer to the buffer, that will receive the port number of the sender. If the <em>port</em> is <span class="XML-Token">NULL</span>, the port number is not returned.</p>
786 <dl class="section note"><dt>Note</dt><dd>The function can also be used to check if the socket has data available to read by specifying <span class="XML-Token">0</span> for argument <em>len</em> (arguments <em>buf</em>, <em>ip</em>, <em>ip_len</em> and <em>port</em> are ignored). The function returns <span class="XML-Token">0</span> if data is available or error code otherwise. In blocking mode, the function waits until data is available, in non blocking mode the function returns instantly.</dd></dl>
787 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> Driver_WiFi0;</div>
788 <div class="line"><span class="keyword">static</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> *wifi;</div>
789 <div class="line"> </div>
790 <div class="line"><span class="keywordtype">void</span> Echo_Server_Thread (<span class="keywordtype">void</span> *arg) {</div>
791 <div class="line">  uint8_t ip[4];</div>
792 <div class="line">  uint16_t port;</div>
793 <div class="line">  int32_t sock, res;</div>
794 <div class="line">  uint32_t ip_len;</div>
795 <div class="line">  <span class="keywordtype">char</span> dbuf[120];</div>
796 <div class="line"> </div>
797 <div class="line">  <span class="keywordflow">while</span> (1) {</div>
798 <div class="line">    wifi = &amp;Driver_WiFi0;</div>
799 <div class="line">    sock = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a9e5629f415de14f3e5634aa2627414a2">SocketCreate</a> (<a class="code hl_define" href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a>, <a class="code hl_define" href="group__wifi__socket__type.html#gaced5f33eda2fc38a8303cd11a0d76fab">ARM_SOCKET_SOCK_DGRAM</a>, <a class="code hl_define" href="group__wifi__protocol.html#gabacbead83c772f5737b25b4fc390e16d">ARM_SOCKET_IPPROTO_UDP</a>);</div>
800 <div class="line"> </div>
801 <div class="line">    ip[0] = 0U;                 <span class="comment">// Unspecified address</span></div>
802 <div class="line">    ip[1] = 0U;</div>
803 <div class="line">    ip[2] = 0U;</div>
804 <div class="line">    ip[3] = 0U;</div>
805 <div class="line">    port  = 7U;                 <span class="comment">// Standard port for Echo service</span></div>
806 <div class="line"> </div>
807 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#ae6af9f88caa98307fb4f3205a6be61c4">SocketBind</a> (sock, (uint8_t *)ip, <span class="keyword">sizeof</span>(ip), port);</div>
808 <div class="line"> </div>
809 <div class="line">    <span class="keywordflow">while</span> (1) {</div>
810 <div class="line">      ip_len = <span class="keyword">sizeof</span>(ip);</div>
811 <div class="line">      res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a94d71fd169e97ff04a0e47141be235ad">SocketRecvFrom</a> (sock, dbuf, <span class="keyword">sizeof</span>(dbuf), (uint8_t *)ip, &amp;ip_len, &amp;port);</div>
812 <div class="line">      <span class="keywordflow">if</span> (res &lt; 0) {</div>
813 <div class="line">        <span class="keywordflow">break</span>;                  <span class="comment">// Error occurred</span></div>
814 <div class="line">      }</div>
815 <div class="line">      <span class="keywordflow">if</span> (res &gt; 0) {            <span class="comment">// Echo the data</span></div>
816 <div class="line">        wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a3f82c726a8ee51e0e87de2aebba4025f">SocketSendTo</a> (sock, dbuf, res, (uint8_t *)ip, ip_len, port);</div>
817 <div class="line">      }    </div>
818 <div class="line">    }</div>
819 <div class="line">    wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#a377a2e62f3f10140256617b533995c12">SocketClose</a> (sock);</div>
820 <div class="line">  }</div>
821 <div class="line">}</div>
822 <div class="ttc" id="agroup__wifi__interface__gr_html_a3f82c726a8ee51e0e87de2aebba4025f"><div class="ttname"><a href="group__wifi__interface__gr.html#a3f82c726a8ee51e0e87de2aebba4025f">ARM_DRIVER_WIFI::SocketSendTo</a></div><div class="ttdeci">int32_t(* SocketSendTo)(int32_t socket, const void *buf, uint32_t len, const uint8_t *ip, uint32_t ip_len, uint16_t port)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:652</div></div>
823 <div class="ttc" id="agroup__wifi__interface__gr_html_a94d71fd169e97ff04a0e47141be235ad"><div class="ttname"><a href="group__wifi__interface__gr.html#a94d71fd169e97ff04a0e47141be235ad">ARM_DRIVER_WIFI::SocketRecvFrom</a></div><div class="ttdeci">int32_t(* SocketRecvFrom)(int32_t socket, void *buf, uint32_t len, uint8_t *ip, uint32_t *ip_len, uint16_t *port)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:650</div></div>
824 <div class="ttc" id="agroup__wifi__protocol_html_gabacbead83c772f5737b25b4fc390e16d"><div class="ttname"><a href="group__wifi__protocol.html#gabacbead83c772f5737b25b4fc390e16d">ARM_SOCKET_IPPROTO_UDP</a></div><div class="ttdeci">#define ARM_SOCKET_IPPROTO_UDP</div><div class="ttdoc">UDP.</div></div>
825 <div class="ttc" id="agroup__wifi__socket__type_html_gaced5f33eda2fc38a8303cd11a0d76fab"><div class="ttname"><a href="group__wifi__socket__type.html#gaced5f33eda2fc38a8303cd11a0d76fab">ARM_SOCKET_SOCK_DGRAM</a></div><div class="ttdeci">#define ARM_SOCKET_SOCK_DGRAM</div><div class="ttdoc">Datagram socket.</div></div>
826 </div><!-- fragment --> 
827 </div>
828 </div>
829 <a id="gaee8615b026e8525fb21ca45ba3778ac8" name="gaee8615b026e8525fb21ca45ba3778ac8"></a>
830 <h2 class="memtitle"><span class="permalink"><a href="#gaee8615b026e8525fb21ca45ba3778ac8">&#9670;&#160;</a></span>ARM_WIFI_SocketSend()</h2>
831
832 <div class="memitem">
833 <div class="memproto">
834       <table class="memname">
835         <tr>
836           <td class="memname">int32_t ARM_WIFI_SocketSend </td>
837           <td>(</td>
838           <td class="paramtype">int32_t&#160;</td>
839           <td class="paramname"><em>socket</em>, </td>
840         </tr>
841         <tr>
842           <td class="paramkey"></td>
843           <td></td>
844           <td class="paramtype">const void *&#160;</td>
845           <td class="paramname"><em>buf</em>, </td>
846         </tr>
847         <tr>
848           <td class="paramkey"></td>
849           <td></td>
850           <td class="paramtype">uint32_t&#160;</td>
851           <td class="paramname"><em>len</em>&#160;</td>
852         </tr>
853         <tr>
854           <td></td>
855           <td>)</td>
856           <td></td><td></td>
857         </tr>
858       </table>
859 </div><div class="memdoc">
860
861 <p>Send data or check if data can be sent on a connected socket. </p>
862 <dl class="params"><dt>Parameters</dt><dd>
863   <table class="params">
864     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
865     <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing data to send </td></tr>
866     <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>Length of data (in bytes), set len = 0 to check if data can be sent </td></tr>
867   </table>
868   </dd>
869 </dl>
870 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
871 <li>number of bytes sent (&gt;=0), if len != 0</li>
872 <li>0 : Data can be sent (len = 0)</li>
873 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
874 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (pointer to buffer or length)</li>
875 <li><a class="el" href="group__wifi__soc__func.html#ga0bde95e313d907032074583bc06b24a1">ARM_SOCKET_ENOTCONN</a> : Socket is not connected</li>
876 <li><a class="el" href="group__wifi__soc__func.html#ga87fa238861921ba1b272019a83b04676">ARM_SOCKET_ECONNRESET</a> : Connection reset by the peer</li>
877 <li><a class="el" href="group__wifi__soc__func.html#ga7e64d6bd00a2f6e30ece3ff0f02b5b27">ARM_SOCKET_ECONNABORTED</a> : Connection aborted locally</li>
878 <li><a class="el" href="group__wifi__soc__func.html#ga699dbd55e543fd38d333cf1d4470d8db">ARM_SOCKET_EAGAIN</a> : Operation would block or timed out (may be called again)</li>
879 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
880 </ul>
881 </dd></dl>
882 <p>The function <b>ARM_WIFI_SocketSend</b> is used to send data on an already connected socket. This function is normally used to send a reliable, ordered stream of data bytes on a stream sockets. It can also be used to send messages on datagram sockets.</p>
883 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
884 <p>The argument <em>buf</em> is a pointer to the application data buffer containing data to transmit. The buffer data length is not limited in size. If the data length is too large for one packet, the <b>ARM_WIFI_SocketSend</b> function will fragment the data and send it in several successive data packets:</p><ul>
885 <li>In blocking mode, which is enabled by default, this function returns after the data has been successfully queued for transmission.</li>
886 <li>In non blocking mode, the function returns immediately without blocking the system.</li>
887 </ul>
888 <p>The argument <em>len</em> specifies the length of data in bytes.</p>
889 <p>Return value, when positive, represents the number of bytes sent, which can be less than <em>len</em>.</p>
890 <dl class="section note"><dt>Note</dt><dd>The function can also be used to check if the socket is ready to send data by specifying <span class="XML-Token">0</span> for argument <em>len</em> (argument <em>buf</em> is ignored). The function returns <span class="XML-Token">0</span> if the socket is writable or error code otherwise.</dd></dl>
891 <p><b>Example:</b> </p><ul>
892 <li>see <a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a> </li>
893 </ul>
894
895 </div>
896 </div>
897 <a id="ga5ddd3dd5f863b8392e4281dd48a28d28" name="ga5ddd3dd5f863b8392e4281dd48a28d28"></a>
898 <h2 class="memtitle"><span class="permalink"><a href="#ga5ddd3dd5f863b8392e4281dd48a28d28">&#9670;&#160;</a></span>ARM_WIFI_SocketSendTo()</h2>
899
900 <div class="memitem">
901 <div class="memproto">
902       <table class="memname">
903         <tr>
904           <td class="memname">int32_t ARM_WIFI_SocketSendTo </td>
905           <td>(</td>
906           <td class="paramtype">int32_t&#160;</td>
907           <td class="paramname"><em>socket</em>, </td>
908         </tr>
909         <tr>
910           <td class="paramkey"></td>
911           <td></td>
912           <td class="paramtype">const void *&#160;</td>
913           <td class="paramname"><em>buf</em>, </td>
914         </tr>
915         <tr>
916           <td class="paramkey"></td>
917           <td></td>
918           <td class="paramtype">uint32_t&#160;</td>
919           <td class="paramname"><em>len</em>, </td>
920         </tr>
921         <tr>
922           <td class="paramkey"></td>
923           <td></td>
924           <td class="paramtype">const uint8_t *&#160;</td>
925           <td class="paramname"><em>ip</em>, </td>
926         </tr>
927         <tr>
928           <td class="paramkey"></td>
929           <td></td>
930           <td class="paramtype">uint32_t&#160;</td>
931           <td class="paramname"><em>ip_len</em>, </td>
932         </tr>
933         <tr>
934           <td class="paramkey"></td>
935           <td></td>
936           <td class="paramtype">uint16_t&#160;</td>
937           <td class="paramname"><em>port</em>&#160;</td>
938         </tr>
939         <tr>
940           <td></td>
941           <td>)</td>
942           <td></td><td></td>
943         </tr>
944       </table>
945 </div><div class="memdoc">
946
947 <p>Send data or check if data can be sent on a socket. </p>
948 <dl class="params"><dt>Parameters</dt><dd>
949   <table class="params">
950     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
951     <tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>Pointer to buffer containing data to send </td></tr>
952     <tr><td class="paramdir">[in]</td><td class="paramname">len</td><td>Length of data (in bytes), set len = 0 to check if data can be sent </td></tr>
953     <tr><td class="paramdir">[in]</td><td class="paramname">ip</td><td>Pointer to remote destination IP address </td></tr>
954     <tr><td class="paramdir">[in]</td><td class="paramname">ip_len</td><td>Length of 'ip' address in bytes </td></tr>
955     <tr><td class="paramdir">[in]</td><td class="paramname">port</td><td>Remote destination port number </td></tr>
956   </table>
957   </dd>
958 </dl>
959 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
960 <li>number of bytes sent (&gt;=0), if len != 0</li>
961 <li>0 : Data can be sent (len = 0)</li>
962 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
963 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (pointer to buffer or length)</li>
964 <li><a class="el" href="group__wifi__soc__func.html#ga0bde95e313d907032074583bc06b24a1">ARM_SOCKET_ENOTCONN</a> : Socket is not connected</li>
965 <li><a class="el" href="group__wifi__soc__func.html#ga87fa238861921ba1b272019a83b04676">ARM_SOCKET_ECONNRESET</a> : Connection reset by the peer</li>
966 <li><a class="el" href="group__wifi__soc__func.html#ga7e64d6bd00a2f6e30ece3ff0f02b5b27">ARM_SOCKET_ECONNABORTED</a> : Connection aborted locally</li>
967 <li><a class="el" href="group__wifi__soc__func.html#ga699dbd55e543fd38d333cf1d4470d8db">ARM_SOCKET_EAGAIN</a> : Operation would block or timed out (may be called again)</li>
968 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
969 </ul>
970 </dd></dl>
971 <p>The function <b>ARM_WIFI_SocketSendTo</b> is used to send data. It is normally used to send messages on a datagram sockets, but can also be used to send data on a connected stream sockets.</p>
972 <p>If the datagram socket is not yet bound, the system implicitly binds to a random dynamic port.</p>
973 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
974 <p>The argument <em>buf</em> is a pointer to the application data buffer containing data to transmit. The buffer data length is not limited in size. If the data length is too large for one packet, the <b>ARM_WIFI_SocketSend</b> function will fragment the data and send it in several successive data packets:</p><ul>
975 <li>In blocking mode, which is enabled by default, this function returns after the data has been successfully queued for transmission.</li>
976 <li>In non blocking mode, the function returns immediately without blocking the system.</li>
977 </ul>
978 <p>The argument <em>len</em> specifies the length of data in bytes.</p>
979 <p>The argument <em>ip</em> is a pointer to the buffer containing the IP address octets of the endpoint node.</p>
980 <p>The argument <em>ip_len</em> specifies the length of the IP address. The length is <span class="XML-Token">4</span> bytes for the IPv4 address and <span class="XML-Token">16</span> bytes for the IPv6 address.</p>
981 <p>The argument <em>port</em> specifies the port of the endpoint node. If the argument <em>port</em> is <span class="XML-Token">0</span>, the function returns error, because this port is reserved.</p>
982 <p>For the stream sockets, arguments <em>ip</em>, <em>ip_len</em> and <em>port</em> are ignored.</p>
983 <p>Return value, when positive, represents the number of bytes sent, which can be less than <em>len</em>.</p>
984 <dl class="section note"><dt>Note</dt><dd>The function can also be used to check if the socket is ready to send data by specifying <span class="XML-Token">0</span> for argument <em>len</em> (arguments <em>buf</em>, <em>ip</em>, <em>ip_len</em> and <em>port</em> are ignored). The function returns <span class="XML-Token">0</span> if the socket is writable or error code otherwise.</dd></dl>
985 <p><b>Example:</b> </p><ul>
986 <li>see <a class="el" href="group__wifi__socket__gr.html#ga2b15232d69f2ae8e189512d6c68c8a81">ARM_WIFI_SocketRecvFrom</a> </li>
987 </ul>
988
989 </div>
990 </div>
991 <a id="gac187e418893de33817e4fcbdd85dbaee" name="gac187e418893de33817e4fcbdd85dbaee"></a>
992 <h2 class="memtitle"><span class="permalink"><a href="#gac187e418893de33817e4fcbdd85dbaee">&#9670;&#160;</a></span>ARM_WIFI_SocketGetSockName()</h2>
993
994 <div class="memitem">
995 <div class="memproto">
996       <table class="memname">
997         <tr>
998           <td class="memname">int32_t ARM_WIFI_SocketGetSockName </td>
999           <td>(</td>
1000           <td class="paramtype">int32_t&#160;</td>
1001           <td class="paramname"><em>socket</em>, </td>
1002         </tr>
1003         <tr>
1004           <td class="paramkey"></td>
1005           <td></td>
1006           <td class="paramtype">uint8_t *&#160;</td>
1007           <td class="paramname"><em>ip</em>, </td>
1008         </tr>
1009         <tr>
1010           <td class="paramkey"></td>
1011           <td></td>
1012           <td class="paramtype">uint32_t *&#160;</td>
1013           <td class="paramname"><em>ip_len</em>, </td>
1014         </tr>
1015         <tr>
1016           <td class="paramkey"></td>
1017           <td></td>
1018           <td class="paramtype">uint16_t *&#160;</td>
1019           <td class="paramname"><em>port</em>&#160;</td>
1020         </tr>
1021         <tr>
1022           <td></td>
1023           <td>)</td>
1024           <td></td><td></td>
1025         </tr>
1026       </table>
1027 </div><div class="memdoc">
1028
1029 <p>Retrieve local IP address and port of a socket. </p>
1030 <dl class="params"><dt>Parameters</dt><dd>
1031   <table class="params">
1032     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
1033     <tr><td class="paramdir">[out]</td><td class="paramname">ip</td><td>Pointer to buffer where local address shall be returned (NULL for none) </td></tr>
1034     <tr><td class="paramdir">[in,out]</td><td class="paramname">ip_len</td><td>Pointer to length of 'ip' (or NULL if 'ip' is NULL)<ul>
1035 <li>length of supplied 'ip' on input</li>
1036 <li>length of stored 'ip' on output </li>
1037 </ul>
1038 </td></tr>
1039     <tr><td class="paramdir">[out]</td><td class="paramname">port</td><td>Pointer to buffer where local port shall be returned (NULL for none) </td></tr>
1040   </table>
1041   </dd>
1042 </dl>
1043 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
1044 <li>0 : Operation successful</li>
1045 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
1046 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (pointer to buffer or length)</li>
1047 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
1048 </ul>
1049 </dd></dl>
1050 <p>The function <b>ARM_WIFI_SocketGetSockName</b> retrieves the local IP address and port for a socket.</p>
1051 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
1052 <p>The argument <em>ip</em> is a pointer to the buffer that will receive the local IP address. If the <em>ip</em> is <span class="XML-Token">NULL</span>, the local IP address is not returned.</p>
1053 <p>The argument <em>ip_len</em> is a pointer to the IP address length. It should initially contain the amount of space pointed to by <em>ip</em>. On return it contains the actual length of the address returned in bytes.</p>
1054 <p>The argument <em>port</em> is a pointer to the buffer, that will receive the local port number. If the <em>port</em> is <span class="XML-Token">NULL</span>, the local port number is not returned.</p>
1055 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">static</span> uint8_t  local_ip[4];    <span class="comment">// Socket address and port</span></div>
1056 <div class="line"><span class="keyword">static</span> uint16_t local_port;</div>
1057 <div class="line"> </div>
1058 <div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> get_socket_local_info (<span class="keywordtype">void</span>) {</div>
1059 <div class="line">  uint32_t ip_len;</div>
1060 <div class="line"> </div>
1061 <div class="line">  ip_len = <span class="keyword">sizeof</span>(local_ip);</div>
1062 <div class="line">  wifi-&gt;SocketGetSockName (sock, (uint8_t *)local_ip, &amp;ip_len, &amp;local_port);</div>
1063 <div class="line">}</div>
1064 </div><!-- fragment --> 
1065 </div>
1066 </div>
1067 <a id="gaa484a931d55d163477920bc865dd9220" name="gaa484a931d55d163477920bc865dd9220"></a>
1068 <h2 class="memtitle"><span class="permalink"><a href="#gaa484a931d55d163477920bc865dd9220">&#9670;&#160;</a></span>ARM_WIFI_SocketGetPeerName()</h2>
1069
1070 <div class="memitem">
1071 <div class="memproto">
1072       <table class="memname">
1073         <tr>
1074           <td class="memname">int32_t ARM_WIFI_SocketGetPeerName </td>
1075           <td>(</td>
1076           <td class="paramtype">int32_t&#160;</td>
1077           <td class="paramname"><em>socket</em>, </td>
1078         </tr>
1079         <tr>
1080           <td class="paramkey"></td>
1081           <td></td>
1082           <td class="paramtype">uint8_t *&#160;</td>
1083           <td class="paramname"><em>ip</em>, </td>
1084         </tr>
1085         <tr>
1086           <td class="paramkey"></td>
1087           <td></td>
1088           <td class="paramtype">uint32_t *&#160;</td>
1089           <td class="paramname"><em>ip_len</em>, </td>
1090         </tr>
1091         <tr>
1092           <td class="paramkey"></td>
1093           <td></td>
1094           <td class="paramtype">uint16_t *&#160;</td>
1095           <td class="paramname"><em>port</em>&#160;</td>
1096         </tr>
1097         <tr>
1098           <td></td>
1099           <td>)</td>
1100           <td></td><td></td>
1101         </tr>
1102       </table>
1103 </div><div class="memdoc">
1104
1105 <p>Retrieve remote IP address and port of a socket. </p>
1106 <dl class="params"><dt>Parameters</dt><dd>
1107   <table class="params">
1108     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
1109     <tr><td class="paramdir">[out]</td><td class="paramname">ip</td><td>Pointer to buffer where remote address shall be returned (NULL for none) </td></tr>
1110     <tr><td class="paramdir">[in,out]</td><td class="paramname">ip_len</td><td>Pointer to length of 'ip' (or NULL if 'ip' is NULL)<ul>
1111 <li>length of supplied 'ip' on input</li>
1112 <li>length of stored 'ip' on output </li>
1113 </ul>
1114 </td></tr>
1115     <tr><td class="paramdir">[out]</td><td class="paramname">port</td><td>Pointer to buffer where remote port shall be returned (NULL for none) </td></tr>
1116   </table>
1117   </dd>
1118 </dl>
1119 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
1120 <li>0 : Operation successful</li>
1121 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
1122 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument (pointer to buffer or length)</li>
1123 <li><a class="el" href="group__wifi__soc__func.html#ga0bde95e313d907032074583bc06b24a1">ARM_SOCKET_ENOTCONN</a> : Socket is not connected</li>
1124 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
1125 </ul>
1126 </dd></dl>
1127 <p>The function <b>ARM_WIFI_SocketGetPeerName</b> retrieves the IP address and port of the peer to which a socket is connected.</p>
1128 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
1129 <p>The argument <em>ip</em> is a pointer to the buffer that will receive the IP address of the peer. If the <em>ip</em> is <span class="XML-Token">NULL</span>, the IP address is not returned.</p>
1130 <p>The argument <em>ip_len</em> is a pointer to the IP address length. It should initially contain the amount of space pointed to by <em>ip</em>. On return it contains the actual length of the address returned in bytes.</p>
1131 <p>The argument <em>port</em> is a pointer to the buffer, that will receive the port number of the peer. If the <em>port</em> is <span class="XML-Token">NULL</span>, the port number is not returned.</p>
1132 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">static</span> uint8_t  peer_ip[4];    <span class="comment">// Socket address and port</span></div>
1133 <div class="line"><span class="keyword">static</span> uint16_t peer_port;</div>
1134 <div class="line"> </div>
1135 <div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> get_socket_peer_info (<span class="keywordtype">void</span>) {</div>
1136 <div class="line">  uint32_t ip_len;</div>
1137 <div class="line"> </div>
1138 <div class="line">  ip_len = <span class="keyword">sizeof</span>(peer_ip);</div>
1139 <div class="line">  wifi-&gt;SocketGetPeerName (sock, (uint8_t *)peer_ip, &amp;ip_len, &amp;peer_port);</div>
1140 <div class="line">}</div>
1141 </div><!-- fragment --> 
1142 </div>
1143 </div>
1144 <a id="ga6d69360e9774937b7bdc03b45fbc9075" name="ga6d69360e9774937b7bdc03b45fbc9075"></a>
1145 <h2 class="memtitle"><span class="permalink"><a href="#ga6d69360e9774937b7bdc03b45fbc9075">&#9670;&#160;</a></span>ARM_WIFI_SocketGetOpt()</h2>
1146
1147 <div class="memitem">
1148 <div class="memproto">
1149       <table class="memname">
1150         <tr>
1151           <td class="memname">int32_t ARM_WIFI_SocketGetOpt </td>
1152           <td>(</td>
1153           <td class="paramtype">int32_t&#160;</td>
1154           <td class="paramname"><em>socket</em>, </td>
1155         </tr>
1156         <tr>
1157           <td class="paramkey"></td>
1158           <td></td>
1159           <td class="paramtype">int32_t&#160;</td>
1160           <td class="paramname"><em>opt_id</em>, </td>
1161         </tr>
1162         <tr>
1163           <td class="paramkey"></td>
1164           <td></td>
1165           <td class="paramtype">void *&#160;</td>
1166           <td class="paramname"><em>opt_val</em>, </td>
1167         </tr>
1168         <tr>
1169           <td class="paramkey"></td>
1170           <td></td>
1171           <td class="paramtype">uint32_t *&#160;</td>
1172           <td class="paramname"><em>opt_len</em>&#160;</td>
1173         </tr>
1174         <tr>
1175           <td></td>
1176           <td>)</td>
1177           <td></td><td></td>
1178         </tr>
1179       </table>
1180 </div><div class="memdoc">
1181
1182 <p>Get socket option. </p>
1183 <dl class="params"><dt>Parameters</dt><dd>
1184   <table class="params">
1185     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
1186     <tr><td class="paramdir">[in]</td><td class="paramname">opt_id</td><td>Option identifier </td></tr>
1187     <tr><td class="paramdir">[out]</td><td class="paramname">opt_val</td><td>Pointer to the buffer that will receive the option value </td></tr>
1188     <tr><td class="paramdir">[in,out]</td><td class="paramname">opt_len</td><td>Pointer to length of the option value<ul>
1189 <li>length of buffer on input</li>
1190 <li>length of data on output </li>
1191 </ul>
1192 </td></tr>
1193   </table>
1194   </dd>
1195 </dl>
1196 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
1197 <li>0 : Operation successful</li>
1198 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
1199 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument</li>
1200 <li><a class="el" href="group__wifi__soc__func.html#ga95ab80319bfbc5413fc5334e3d5ce5d2">ARM_SOCKET_ENOTSUP</a> : Operation not supported</li>
1201 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
1202 </ul>
1203 </dd></dl>
1204 <p>The function <b>ARM_WIFI_SocketGetOpt</b> retrieves options for a socket.</p>
1205 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
1206 <p>The argument <em>opt_id</em> is the socket option for which the value is to be retrieved. The following socket options are supported: </p><table class="markdownTable">
1207 <tr class="markdownTableHead">
1208 <th class="markdownTableHeadLeft">Option   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1209 <tr class="markdownTableRowOdd">
1210 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#ga6f76374467b5580ab0e440da1c39024e">ARM_SOCKET_SO_RCVTIMEO</a>   </td><td class="markdownTableBodyLeft">Timeout for receiving in blocking mode    </td></tr>
1211 <tr class="markdownTableRowEven">
1212 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#gad633987fb5b3478b54d3269b1b03497a">ARM_SOCKET_SO_SNDTIMEO</a>   </td><td class="markdownTableBodyLeft">Timeout for sending in blocking mode    </td></tr>
1213 <tr class="markdownTableRowOdd">
1214 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#ga925f699a931ccbfb87eb5f3d36cbe405">ARM_SOCKET_SO_KEEPALIVE</a>   </td><td class="markdownTableBodyLeft">Keep-alive mode for the stream socket    </td></tr>
1215 <tr class="markdownTableRowEven">
1216 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#ga0466a14ce32b2cc28887735b632f3e63">ARM_SOCKET_SO_TYPE</a>   </td><td class="markdownTableBodyLeft">Type of the socket (stream or datagram)   </td></tr>
1217 </table>
1218 <p>The argument <em>opt_val</em> points to the buffer that will receive the value of the <em>opt_id</em>.</p>
1219 <p>The argument <em>opt_len</em> contains the length of the buffer at the input and returns the length of the option information on the output.</p>
1220 <p><b>Example:</b> </p><div class="fragment"><div class="line">uint32_t type;</div>
1221 <div class="line"> </div>
1222 <div class="line">wifi-&gt;SocketGetOpt (sock, <a class="code hl_define" href="group__wifi__soc__opt.html#ga0466a14ce32b2cc28887735b632f3e63">ARM_SOCKET_SO_TYPE</a>, &amp;type, <span class="keyword">sizeof</span>(type));</div>
1223 <div class="line"><span class="keywordflow">if</span> (type == <a class="code hl_define" href="group__wifi__socket__type.html#ga9567d5735856190b2ae9cc39f68637f1">ARM_SOCKET_SOCK_STREAM</a>) {</div>
1224 <div class="line">  <span class="comment">// Stream socket</span></div>
1225 <div class="line">}</div>
1226 <div class="line"><span class="keywordflow">if</span> (type == <a class="code hl_define" href="group__wifi__socket__type.html#gaced5f33eda2fc38a8303cd11a0d76fab">ARM_SOCKET_SOCK_DGRAM</a>) {</div>
1227 <div class="line">  <span class="comment">// Datagram socket</span></div>
1228 <div class="line">}</div>
1229 <div class="ttc" id="agroup__wifi__soc__opt_html_ga0466a14ce32b2cc28887735b632f3e63"><div class="ttname"><a href="group__wifi__soc__opt.html#ga0466a14ce32b2cc28887735b632f3e63">ARM_SOCKET_SO_TYPE</a></div><div class="ttdeci">#define ARM_SOCKET_SO_TYPE</div><div class="ttdoc">Socket Type (Get only); opt_val = &amp;socket_type, opt_len = sizeof(socket_type), socket_type (integer):...</div></div>
1230 </div><!-- fragment --> 
1231 </div>
1232 </div>
1233 <a id="ga5de80d6729d9504a21dd5d31dc504017" name="ga5de80d6729d9504a21dd5d31dc504017"></a>
1234 <h2 class="memtitle"><span class="permalink"><a href="#ga5de80d6729d9504a21dd5d31dc504017">&#9670;&#160;</a></span>ARM_WIFI_SocketSetOpt()</h2>
1235
1236 <div class="memitem">
1237 <div class="memproto">
1238       <table class="memname">
1239         <tr>
1240           <td class="memname">int32_t ARM_WIFI_SocketSetOpt </td>
1241           <td>(</td>
1242           <td class="paramtype">int32_t&#160;</td>
1243           <td class="paramname"><em>socket</em>, </td>
1244         </tr>
1245         <tr>
1246           <td class="paramkey"></td>
1247           <td></td>
1248           <td class="paramtype">int32_t&#160;</td>
1249           <td class="paramname"><em>opt_id</em>, </td>
1250         </tr>
1251         <tr>
1252           <td class="paramkey"></td>
1253           <td></td>
1254           <td class="paramtype">const void *&#160;</td>
1255           <td class="paramname"><em>opt_val</em>, </td>
1256         </tr>
1257         <tr>
1258           <td class="paramkey"></td>
1259           <td></td>
1260           <td class="paramtype">uint32_t&#160;</td>
1261           <td class="paramname"><em>opt_len</em>&#160;</td>
1262         </tr>
1263         <tr>
1264           <td></td>
1265           <td>)</td>
1266           <td></td><td></td>
1267         </tr>
1268       </table>
1269 </div><div class="memdoc">
1270
1271 <p>Set socket option. </p>
1272 <dl class="params"><dt>Parameters</dt><dd>
1273   <table class="params">
1274     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
1275     <tr><td class="paramdir">[in]</td><td class="paramname">opt_id</td><td>Option identifier </td></tr>
1276     <tr><td class="paramdir">[in]</td><td class="paramname">opt_val</td><td>Pointer to the option value </td></tr>
1277     <tr><td class="paramdir">[in]</td><td class="paramname">opt_len</td><td>Length of the option value in bytes </td></tr>
1278   </table>
1279   </dd>
1280 </dl>
1281 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
1282 <li>0 : Operation successful</li>
1283 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
1284 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument</li>
1285 <li><a class="el" href="group__wifi__soc__func.html#ga95ab80319bfbc5413fc5334e3d5ce5d2">ARM_SOCKET_ENOTSUP</a> : Operation not supported</li>
1286 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
1287 </ul>
1288 </dd></dl>
1289 <p>The function <b>ARM_WIFI_SocketSetOpt</b> sets options for a socket.</p>
1290 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
1291 <p>The argument <em>opt_id</em> is the socket option for which the value is to be set. The following socket options are supported: </p><table class="markdownTable">
1292 <tr class="markdownTableHead">
1293 <th class="markdownTableHeadLeft">Option   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1294 <tr class="markdownTableRowOdd">
1295 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#gac6fa12bbc640209a6b63f8cec282f961">ARM_SOCKET_IO_FIONBIO</a>   </td><td class="markdownTableBodyLeft">Non-blocking mode for the socket    </td></tr>
1296 <tr class="markdownTableRowEven">
1297 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#ga6f76374467b5580ab0e440da1c39024e">ARM_SOCKET_SO_RCVTIMEO</a>   </td><td class="markdownTableBodyLeft">Timeout for receiving in blocking mode    </td></tr>
1298 <tr class="markdownTableRowOdd">
1299 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#gad633987fb5b3478b54d3269b1b03497a">ARM_SOCKET_SO_SNDTIMEO</a>   </td><td class="markdownTableBodyLeft">Timeout for sending in blocking mode    </td></tr>
1300 <tr class="markdownTableRowEven">
1301 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__soc__opt.html#ga925f699a931ccbfb87eb5f3d36cbe405">ARM_SOCKET_SO_KEEPALIVE</a>   </td><td class="markdownTableBodyLeft">Keep-alive mode for the stream socket   </td></tr>
1302 </table>
1303 <p>The argument <em>opt_val</em> points to the buffer containing the value of the <em>opt_id</em>.</p>
1304 <p>The argument <em>opt_len</em> tells the exact length of the option.</p>
1305 <p><b>Example:</b> </p><div class="fragment"><div class="line">uint32_t nonblocking = 0U;    <span class="comment">// Blocking mode</span></div>
1306 <div class="line">uint32_t timeout = 10000U;    <span class="comment">// Timeout 10 seconds</span></div>
1307 <div class="line"> </div>
1308 <div class="line">wifi-&gt;SocketSetOpt (sock, <a class="code hl_define" href="group__wifi__soc__opt.html#gac6fa12bbc640209a6b63f8cec282f961">ARM_SOCKET_IO_FIONBIO</a>, &amp;nonblocking, <span class="keyword">sizeof</span>(nonblocking));</div>
1309 <div class="line">wifi-&gt;SocketSetOpt (sock, <a class="code hl_define" href="group__wifi__soc__opt.html#ga6f76374467b5580ab0e440da1c39024e">ARM_SOCKET_SO_RCVTIMEO</a>, &amp;timeout, <span class="keyword">sizeof</span>(timeout)); </div>
1310 <div class="line">wifi-&gt;SocketSetOpt (sock, <a class="code hl_define" href="group__wifi__soc__opt.html#gad633987fb5b3478b54d3269b1b03497a">ARM_SOCKET_SO_SNDTIMEO</a>, &amp;timeout, <span class="keyword">sizeof</span>(timeout));</div>
1311 <div class="ttc" id="agroup__wifi__soc__opt_html_ga6f76374467b5580ab0e440da1c39024e"><div class="ttname"><a href="group__wifi__soc__opt.html#ga6f76374467b5580ab0e440da1c39024e">ARM_SOCKET_SO_RCVTIMEO</a></div><div class="ttdeci">#define ARM_SOCKET_SO_RCVTIMEO</div><div class="ttdoc">Receive timeout in ms (default = 0); opt_val = &amp;timeout, opt_len = sizeof(timeout)</div></div>
1312 <div class="ttc" id="agroup__wifi__soc__opt_html_gac6fa12bbc640209a6b63f8cec282f961"><div class="ttname"><a href="group__wifi__soc__opt.html#gac6fa12bbc640209a6b63f8cec282f961">ARM_SOCKET_IO_FIONBIO</a></div><div class="ttdeci">#define ARM_SOCKET_IO_FIONBIO</div><div class="ttdoc">Non-blocking I/O (Set only, default = 0); opt_val = &amp;nbio, opt_len = sizeof(nbio),...</div></div>
1313 <div class="ttc" id="agroup__wifi__soc__opt_html_gad633987fb5b3478b54d3269b1b03497a"><div class="ttname"><a href="group__wifi__soc__opt.html#gad633987fb5b3478b54d3269b1b03497a">ARM_SOCKET_SO_SNDTIMEO</a></div><div class="ttdeci">#define ARM_SOCKET_SO_SNDTIMEO</div><div class="ttdoc">Send timeout in ms (default = 0); opt_val = &amp;timeout, opt_len = sizeof(timeout)</div></div>
1314 </div><!-- fragment --> 
1315 </div>
1316 </div>
1317 <a id="ga391464de71b6a5d300fda9434fe87a87" name="ga391464de71b6a5d300fda9434fe87a87"></a>
1318 <h2 class="memtitle"><span class="permalink"><a href="#ga391464de71b6a5d300fda9434fe87a87">&#9670;&#160;</a></span>ARM_WIFI_SocketClose()</h2>
1319
1320 <div class="memitem">
1321 <div class="memproto">
1322       <table class="memname">
1323         <tr>
1324           <td class="memname">int32_t ARM_WIFI_SocketClose </td>
1325           <td>(</td>
1326           <td class="paramtype">int32_t&#160;</td>
1327           <td class="paramname"><em>socket</em></td><td>)</td>
1328           <td></td>
1329         </tr>
1330       </table>
1331 </div><div class="memdoc">
1332
1333 <p>Close and release a socket. </p>
1334 <dl class="params"><dt>Parameters</dt><dd>
1335   <table class="params">
1336     <tr><td class="paramdir">[in]</td><td class="paramname">socket</td><td>Socket identification number </td></tr>
1337   </table>
1338   </dd>
1339 </dl>
1340 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
1341 <li>0 : Operation successful</li>
1342 <li><a class="el" href="group__wifi__soc__func.html#ga535e069b83aafcf70dd089e6097bceef">ARM_SOCKET_ESOCK</a> : Invalid socket</li>
1343 <li><a class="el" href="group__wifi__soc__func.html#ga699dbd55e543fd38d333cf1d4470d8db">ARM_SOCKET_EAGAIN</a> : Operation would block (may be called again)</li>
1344 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
1345 </ul>
1346 </dd></dl>
1347 <p>The function <b>ARM_WIFI_SocketClose</b> closes an existing socket and releases the socket descriptor. Further references to <em>socket</em> fail with <code>ARM_SOCKET_EINVAL</code> error code.</p>
1348 <p>The argument <em>socket</em> specifies a socket identification number returned from a previous call to <a class="el" href="group__wifi__socket__gr.html#ga1433b297315ab394f1544a18548ffcc6">ARM_WIFI_SocketCreate</a>.</p>
1349 <p>In blocking mode, which is enabled by default, this function will wait until a socket is closed. In non blocking mode, you must call the <b>ARM_WIFI_SocketClose</b> function again if the error code <code>ARM_SOCKET_EAGAIN</code> is returned.</p>
1350 <p><b>Example:</b> </p><ul>
1351 <li>see <a class="el" href="group__wifi__socket__gr.html#ga4929aab257781dcaae7197f917991779">ARM_WIFI_SocketListen</a> </li>
1352 </ul>
1353
1354 </div>
1355 </div>
1356 <a id="ga0c37435c6abc68ee0f1f4357b503e0bf" name="ga0c37435c6abc68ee0f1f4357b503e0bf"></a>
1357 <h2 class="memtitle"><span class="permalink"><a href="#ga0c37435c6abc68ee0f1f4357b503e0bf">&#9670;&#160;</a></span>ARM_WIFI_SocketGetHostByName()</h2>
1358
1359 <div class="memitem">
1360 <div class="memproto">
1361       <table class="memname">
1362         <tr>
1363           <td class="memname">int32_t ARM_WIFI_SocketGetHostByName </td>
1364           <td>(</td>
1365           <td class="paramtype">const char *&#160;</td>
1366           <td class="paramname"><em>name</em>, </td>
1367         </tr>
1368         <tr>
1369           <td class="paramkey"></td>
1370           <td></td>
1371           <td class="paramtype">int32_t&#160;</td>
1372           <td class="paramname"><em>af</em>, </td>
1373         </tr>
1374         <tr>
1375           <td class="paramkey"></td>
1376           <td></td>
1377           <td class="paramtype">uint8_t *&#160;</td>
1378           <td class="paramname"><em>ip</em>, </td>
1379         </tr>
1380         <tr>
1381           <td class="paramkey"></td>
1382           <td></td>
1383           <td class="paramtype">uint32_t *&#160;</td>
1384           <td class="paramname"><em>ip_len</em>&#160;</td>
1385         </tr>
1386         <tr>
1387           <td></td>
1388           <td>)</td>
1389           <td></td><td></td>
1390         </tr>
1391       </table>
1392 </div><div class="memdoc">
1393
1394 <p>Retrieve host IP address from host name. </p>
1395 <dl class="params"><dt>Parameters</dt><dd>
1396   <table class="params">
1397     <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>Host name </td></tr>
1398     <tr><td class="paramdir">[in]</td><td class="paramname">af</td><td>Address family </td></tr>
1399     <tr><td class="paramdir">[out]</td><td class="paramname">ip</td><td>Pointer to buffer where resolved IP address shall be returned </td></tr>
1400     <tr><td class="paramdir">[in,out]</td><td class="paramname">ip_len</td><td>Pointer to length of 'ip'<ul>
1401 <li>length of supplied 'ip' on input</li>
1402 <li>length of stored 'ip' on output </li>
1403 </ul>
1404 </td></tr>
1405   </table>
1406   </dd>
1407 </dl>
1408 <dl class="section return"><dt>Returns</dt><dd>status information<ul>
1409 <li>0 : Operation successful</li>
1410 <li><a class="el" href="group__wifi__soc__func.html#ga695aa5c5329602d9465fbc6c22fc9978">ARM_SOCKET_EINVAL</a> : Invalid argument</li>
1411 <li><a class="el" href="group__wifi__soc__func.html#ga95ab80319bfbc5413fc5334e3d5ce5d2">ARM_SOCKET_ENOTSUP</a> : Operation not supported</li>
1412 <li><a class="el" href="group__wifi__soc__func.html#ga320ffeeb44d583c0216b24d6e1009d9f">ARM_SOCKET_ETIMEDOUT</a> : Operation timed out</li>
1413 <li><a class="el" href="group__wifi__soc__func.html#ga4d5d38e9a7d5907a3de4165476640cd4">ARM_SOCKET_EHOSTNOTFOUND</a> : Host not found</li>
1414 <li><a class="el" href="group__wifi__soc__func.html#ga2f3db9fdae2366238054ff8a8e8ef97c">ARM_SOCKET_ERROR</a> : Unspecified error</li>
1415 </ul>
1416 </dd></dl>
1417 <p>The function <b>ARM_WIFI_SocketGetHostByName</b> retrieves host information corresponding to a host name from a host database. It does this by sending DNS requests to the DNS server. The IP address of the DNS server is specified in the network interface configuration or can be obtained from the DHCP server for the local area network.</p>
1418 <p>The argument <em>name</em> is a pointer to the <span class="XML-Token">null</span>-terminated name of the host to resolve.</p>
1419 <p>The argument <em>af</em> specifies the address family, that is, which type of IP address you want to resolve. The following values are supported: </p><table class="markdownTable">
1420 <tr class="markdownTableHead">
1421 <th class="markdownTableHeadLeft">Family   </th><th class="markdownTableHeadLeft">Description    </th></tr>
1422 <tr class="markdownTableRowOdd">
1423 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a>   </td><td class="markdownTableBodyLeft">Resolve the IPv4 address    </td></tr>
1424 <tr class="markdownTableRowEven">
1425 <td class="markdownTableBodyLeft"><a class="el" href="group__wifi__addr__family.html#gad50c95421ffbc6eec5f8458b2e170c26">ARM_SOCKET_AF_INET6</a>   </td><td class="markdownTableBodyLeft">Resolve the IPv6 address   </td></tr>
1426 </table>
1427 <p>The argument <em>ip</em> is a pointer to the buffer that will receive the resolved IP address of the host. If the argument <em>ip</em> is <span class="XML-Token">NULL</span>, the function returns error.</p>
1428 <p>The argument <em>ip_len</em> is a pointer to the IP address length. It should initially contain the amount of space pointed to by <em>ip</em>. On return it contains the actual length of the address returned in bytes.</p>
1429 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> Driver_WiFi0;</div>
1430 <div class="line"><span class="keyword">static</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> *wifi;</div>
1431 <div class="line"> </div>
1432 <div class="line"><span class="keywordtype">void</span> ping_arm_com (<span class="keywordtype">void</span>) {</div>
1433 <div class="line">  uint8_t ip[4];</div>
1434 <div class="line">  uint32_t ip_len;</div>
1435 <div class="line">  int32_t res;</div>
1436 <div class="line"> </div>
1437 <div class="line">  wifi = &amp;Driver_WiFi0;</div>
1438 <div class="line">  ip_len = <span class="keyword">sizeof</span>(ip);</div>
1439 <div class="line">  res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#aa54d0476e436658185891e59179cf2b6">SocketGetHostByName</a> (<span class="stringliteral">&quot;www.arm.com&quot;</span>, <a class="code hl_define" href="group__wifi__addr__family.html#ga1a17023d92374b4f2d963aa7ac1c4e17">ARM_SOCKET_AF_INET</a>, (uint8_t *)ip, &amp;ip_len);</div>
1440 <div class="line">  <span class="keywordflow">if</span> (res == <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) {</div>
1441 <div class="line">    res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#aa37e43a599e753abf77609f0b707f62e">Ping</a> ((uint8_t *)ip, <span class="keyword">sizeof</span>(ip));</div>
1442 <div class="line">    <span class="keywordflow">if</span> (res == <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) {</div>
1443 <div class="line">      <span class="comment">// &quot;www.arm.com&quot; responded to ping  </span></div>
1444 <div class="line">    }</div>
1445 <div class="line">  }</div>
1446 <div class="line">  <span class="keywordflow">else</span> {</div>
1447 <div class="line">    <span class="comment">// &quot;www.arm.com&quot; not resolved</span></div>
1448 <div class="line">  }</div>
1449 <div class="line">}</div>
1450 <div class="ttc" id="agroup__execution__status_html_ga85752c5de59e8adeb001e35ff5be6be7"><div class="ttname"><a href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a></div><div class="ttdeci">#define ARM_DRIVER_OK</div><div class="ttdoc">Operation succeeded.</div></div>
1451 <div class="ttc" id="agroup__wifi__interface__gr_html_aa37e43a599e753abf77609f0b707f62e"><div class="ttname"><a href="group__wifi__interface__gr.html#aa37e43a599e753abf77609f0b707f62e">ARM_DRIVER_WIFI::Ping</a></div><div class="ttdeci">int32_t(* Ping)(const uint8_t *ip, uint32_t ip_len)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:659</div></div>
1452 <div class="ttc" id="agroup__wifi__interface__gr_html_aa54d0476e436658185891e59179cf2b6"><div class="ttname"><a href="group__wifi__interface__gr.html#aa54d0476e436658185891e59179cf2b6">ARM_DRIVER_WIFI::SocketGetHostByName</a></div><div class="ttdeci">int32_t(* SocketGetHostByName)(const char *name, int32_t af, uint8_t *ip, uint32_t *ip_len)</div><div class="ttdef"><b>Definition:</b> Driver_WiFi.h:658</div></div>
1453 </div><!-- fragment --> 
1454 </div>
1455 </div>
1456 <a id="gac7a8abb9e23f3f52dabce4153a53c1ca" name="gac7a8abb9e23f3f52dabce4153a53c1ca"></a>
1457 <h2 class="memtitle"><span class="permalink"><a href="#gac7a8abb9e23f3f52dabce4153a53c1ca">&#9670;&#160;</a></span>ARM_WIFI_Ping()</h2>
1458
1459 <div class="memitem">
1460 <div class="memproto">
1461       <table class="memname">
1462         <tr>
1463           <td class="memname">int32_t ARM_WIFI_Ping </td>
1464           <td>(</td>
1465           <td class="paramtype">const uint8_t *&#160;</td>
1466           <td class="paramname"><em>ip</em>, </td>
1467         </tr>
1468         <tr>
1469           <td class="paramkey"></td>
1470           <td></td>
1471           <td class="paramtype">uint32_t&#160;</td>
1472           <td class="paramname"><em>ip_len</em>&#160;</td>
1473         </tr>
1474         <tr>
1475           <td></td>
1476           <td>)</td>
1477           <td></td><td></td>
1478         </tr>
1479       </table>
1480 </div><div class="memdoc">
1481
1482 <p>Probe remote host with Ping command. </p>
1483 <dl class="params"><dt>Parameters</dt><dd>
1484   <table class="params">
1485     <tr><td class="paramdir">[in]</td><td class="paramname">ip</td><td>Pointer to remote host IP address </td></tr>
1486     <tr><td class="paramdir">[in]</td><td class="paramname">ip_len</td><td>Length of 'ip' address in bytes </td></tr>
1487   </table>
1488   </dd>
1489 </dl>
1490 <dl class="section return"><dt>Returns</dt><dd>execution status<ul>
1491 <li><a class="el" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a> : Operation successful</li>
1492 <li><a class="el" href="group__execution__status.html#ga2f627075447749bb368d3b768be107cb">ARM_DRIVER_ERROR</a> : Operation failed</li>
1493 <li><a class="el" href="group__execution__status.html#ga0bac892205bb2d586b822e8b178ab310">ARM_DRIVER_ERROR_TIMEOUT</a> : Timeout occurred</li>
1494 <li><a class="el" href="group__execution__status.html#ga2efa59e480d82697795439220e6884e4">ARM_DRIVER_ERROR_UNSUPPORTED</a> : Operation not supported</li>
1495 <li><a class="el" href="group__execution__status.html#gac781d4b70ce17c4c2efe2db045be751c">ARM_DRIVER_ERROR_PARAMETER</a> : Parameter error (NULL ip pointer or ip_len different than 4 or 16)</li>
1496 </ul>
1497 </dd></dl>
1498 <p>The function <b>ARM_WIFI_Ping</b> checks if the remote host is reachable. It does this by sending an echo request and waiting for an echo response. The function then returns the result of the operation. Check the <a class="el" href="group__wifi__control__gr.html#structARM__WIFI__CAPABILITIES">ARM_WIFI_CAPABILITIES</a> of the driver, if this function is supported in the driver implementation.</p>
1499 <p>The argument <em>ip</em> is a pointer to the buffer containing the IP address octets of the host to ping.</p>
1500 <p>The argument <em>ip_len</em> specifies the length of the IP address. The length is <span class="XML-Token">4</span> bytes for the IPv4 address and <span class="XML-Token">16</span> bytes for the IPv6 address.</p>
1501 <dl class="section note"><dt>Note</dt><dd>The host availability check fails, if the remote host does not respond to echo requests, or intermediate routers do not forward the echo requests or echo responses.</dd></dl>
1502 <p><b>Example:</b> </p><div class="fragment"><div class="line"><span class="keyword">extern</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> Driver_WiFi0;</div>
1503 <div class="line"><span class="keyword">static</span> <a class="code hl_struct" href="group__wifi__interface__gr.html#structARM__DRIVER__WIFI">ARM_DRIVER_WIFI</a> *wifi;</div>
1504 <div class="line"> </div>
1505 <div class="line"><span class="keywordtype">void</span> ping_host (<span class="keywordtype">void</span>) {</div>
1506 <div class="line">  uint8_t ip[4] = { 192U, 168U, 0U, 100U };</div>
1507 <div class="line">  int32_t res;</div>
1508 <div class="line"> </div>
1509 <div class="line">  wifi = &amp;Driver_WiFi0;</div>
1510 <div class="line">  res = wifi-&gt;<a class="code hl_variable" href="group__wifi__interface__gr.html#aa37e43a599e753abf77609f0b707f62e">Ping</a> ((uint8_t *)ip, <span class="keyword">sizeof</span>(ip));</div>
1511 <div class="line">  <span class="keywordflow">if</span> (res == <a class="code hl_define" href="group__execution__status.html#ga85752c5de59e8adeb001e35ff5be6be7">ARM_DRIVER_OK</a>) {</div>
1512 <div class="line">    <span class="comment">// Host responded</span></div>
1513 <div class="line">  }</div>
1514 <div class="line">}</div>
1515 </div><!-- fragment --> 
1516 </div>
1517 </div>
1518 </div><!-- contents -->
1519 </div><!-- doc-content -->
1520 <!-- start footer part -->
1521 <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
1522   <ul>
1523     <li class="footer">
1524       <script type="text/javascript">
1525         <!--
1526         writeFooter.call(this);
1527         //-->
1528       </script> 
1529     </li>
1530   </ul>
1531 </div>
1532 </body>
1533 </html>