aboutsummaryrefslogtreecommitdiff
path: root/doc/oscl_html/osclconfig__io_8h_source.html
blob: eb660a88e941da4f080415fd60146f00436a84c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>oscl: osclconfig_io.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<h1>osclconfig_io.h</h1><a href="osclconfig__io_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// -*- c++ -*-</span>
<a name="l00002"></a>00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
<a name="l00003"></a>00003 
<a name="l00004"></a>00004 <span class="comment">//     O S C L C O N F I G _ I O</span>
<a name="l00005"></a>00005 
<a name="l00006"></a>00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
<a name="l00007"></a>00007 
<a name="l00008"></a>00008 
<a name="l00017"></a>00017 <span class="preprocessor">#ifndef OSCLCONFIG_IO_H_INCLUDED</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define OSCLCONFIG_IO_H_INCLUDED</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span>
<a name="l00020"></a>00020 <span class="preprocessor">#ifndef OSCLCONFIG_H_INCLUDED</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="osclconfig_8h.html" title="This file contains configuration information for the linux platform.">osclconfig.h</a>&quot;</span>
<a name="l00022"></a>00022 <span class="preprocessor">#endif</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span>
<a name="l00024"></a>00024 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;stdarg.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;sys/socket.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;netinet/in.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;arpa/inet.h&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;signal.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;netdb.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;sys/mman.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;errno.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;sys/vfs.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;dirent.h&gt;</span>
<a name="l00038"></a>00038 <span class="comment">//#include &lt;glob.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#if (OSCL_HAS_ANSI_STDLIB_SUPPORT)</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#if (OSCL_HAS_UNIX_SUPPORT)</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#endif</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a>00045 <span class="comment">//For File I/O</span>
<a name="l00046"></a><a class="code" href="osclconfig__io_8h.html#a3e897e7cd1ed0b944fc44204b5843b1a">00046</a> <span class="preprocessor">#define OSCL_HAS_GLOB 0</span>
<a name="l00047"></a><a class="code" href="osclconfig__io_8h.html#a98d128e68cb10542a4d7ad4b9b1aa1db">00047</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_FILE_IO_SUPPORT 1</span>
<a name="l00048"></a><a class="code" href="osclconfig__io_8h.html#adea7fe191769f742bc62aaa10ef4f446">00048</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_ANSI_64BIT_FILE_IO_SUPPORT 0</span>
<a name="l00049"></a><a class="code" href="osclconfig__io_8h.html#a6d2c82dea57d49248023f2b9997a29d9">00049</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_MSWIN_FILE_IO_SUPPORT 0</span>
<a name="l00050"></a><a class="code" href="osclconfig__io_8h.html#a575ccf739ed23345963d52c54564d30c">00050</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SYMBIAN_COMPATIBLE_IO_FUNCTION 0</span>
<a name="l00051"></a><a class="code" href="osclconfig__io_8h.html#a77b46412cb7f54faf1147186319a3ebc">00051</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_NATIVE_FILE_CACHE_ENABLE 1</span>
<a name="l00052"></a><a class="code" href="osclconfig__io_8h.html#a4553446221cd27e4e654f655df9f9db9">00052</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_BUFFER_MAX_SIZE   32768</span>
<a name="l00053"></a><a class="code" href="osclconfig__io_8h.html#a04f4d14092506f5b5384a8ef107016b7">00053</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_PV_FILE_CACHE  0</span>
<a name="l00054"></a><a class="code" href="osclconfig__io_8h.html#a29c5105b086834154d0af765bc290429">00054</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_LARGE_FILE_SUPPORT 1</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span>
<a name="l00056"></a>00056 <span class="comment">//For Sockets</span>
<a name="l00057"></a><a class="code" href="osclconfig__io_8h.html#a2783b7587a5db02693c816cba1ad1869">00057</a> <span class="preprocessor">#define OSCL_HAS_SYMBIAN_SOCKET_SERVER 0</span>
<a name="l00058"></a><a class="code" href="osclconfig__io_8h.html#af52be6d29116a40a9161b690e5f86fe9">00058</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SYMBIAN_DNS_SERVER 0</span>
<a name="l00059"></a><a class="code" href="osclconfig__io_8h.html#ac141f95ff9eddf30f114da4afb51372a">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_BERKELEY_SOCKETS 1</span>
<a name="l00060"></a><a class="code" href="osclconfig__io_8h.html#af4510c7a7359d2b326d82f95bc3cf3cc">00060</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_HAS_SOCKET_SUPPORT 1</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span>
<a name="l00062"></a>00062 <span class="comment">//basic socket types</span>
<a name="l00063"></a><a class="code" href="osclconfig__io_8h.html#a6f124ae8d366b927862ea9c21d534d0c">00063</a> <span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="osclconfig__io_8h.html#a6f124ae8d366b927862ea9c21d534d0c">TOsclSocket</a>;
<a name="l00064"></a><a class="code" href="osclconfig__io_8h.html#a0637dc7e8c32201f83831f3222e2d702">00064</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>sockaddr_in <a class="code" href="osclconfig__io_8h.html#a0637dc7e8c32201f83831f3222e2d702">TOsclSockAddr</a>;
<a name="l00065"></a><a class="code" href="osclconfig__io_8h.html#ac91823d55f7e85a610ce25e520b9cdec">00065</a> <span class="keyword">typedef</span> socklen_t <a class="code" href="osclconfig__io_8h.html#ac91823d55f7e85a610ce25e520b9cdec">TOsclSockAddrLen</a>;
<a name="l00066"></a><a class="code" href="osclconfig__io_8h.html#aa58ec91fce9954b47d774c76ddc50737">00066</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>ip_mreq <a class="code" href="osclconfig__io_8h.html#aa58ec91fce9954b47d774c76ddc50737">TIpMReq</a>;
<a name="l00067"></a>00067 
<a name="l00068"></a>00068 <span class="comment">//Init addr macro, inet_addr returns an uint32</span>
<a name="l00069"></a><a class="code" href="osclconfig__io_8h.html#aafe31ff545b6b18b3f8490de58ae1bc2">00069</a> <span class="preprocessor">#define OsclValidInetAddr(addr) (inet_addr(addr)!=INADDR_NONE)</span>
<a name="l00070"></a>00070 <span class="preprocessor"></span>
<a name="l00071"></a>00071 <span class="comment">//address conversion macro-- from string to network address.</span>
<a name="l00072"></a><a class="code" href="osclconfig__io_8h.html#abaa64ba559a90872d4bc5380c984e5bc">00072</a> <span class="preprocessor">#define OsclMakeSockAddr(sockaddr,port,addrstr,ok)\</span>
<a name="l00073"></a>00073 <span class="preprocessor">    sockaddr.sin_family=OSCL_AF_INET;\</span>
<a name="l00074"></a>00074 <span class="preprocessor">    sockaddr.sin_port=htons(port);\</span>
<a name="l00075"></a>00075 <span class="preprocessor">    int32 result=inet_aton((const char*)addrstr,&amp;sockaddr.sin_addr);\</span>
<a name="l00076"></a>00076 <span class="preprocessor">    ok=(result!=0);</span>
<a name="l00077"></a>00077 <span class="preprocessor"></span>
<a name="l00078"></a>00078 <span class="comment">//address conversion macro-- from network address to string</span>
<a name="l00079"></a><a class="code" href="osclconfig__io_8h.html#a54f031a3a227749057c1e77e4f2a41bc">00079</a> <span class="preprocessor">#define OsclUnMakeSockAddr(sockaddr,addrstr)\</span>
<a name="l00080"></a>00080 <span class="preprocessor">    addrstr=inet_ntoa(sockaddr.sin_addr);</span>
<a name="l00081"></a>00081 <span class="preprocessor"></span><span class="comment">//address conversion macro-- from string to inaddr</span>
<a name="l00082"></a><a class="code" href="osclconfig__io_8h.html#a23467e740a61bdb6da7acf5050a22462">00082</a> <span class="preprocessor">#define OsclMakeInAddr(in_addr,addrstr,ok)\</span>
<a name="l00083"></a>00083 <span class="preprocessor">    int32 result = inet_aton((const char*)addrstr, &amp;in_addr);\</span>
<a name="l00084"></a>00084 <span class="preprocessor">    ok=(result!=0);</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span>
<a name="l00086"></a>00086 <span class="comment">//address conversion macro-- from inaddr to string</span>
<a name="l00087"></a><a class="code" href="osclconfig__io_8h.html#a6fee955451adf6ee5fef8b68d54712d4">00087</a> <span class="preprocessor">#define OsclUnMakeInAddr(in_addr,addrstr)\</span>
<a name="l00088"></a>00088 <span class="preprocessor">    addrstr=inet_ntoa(in_addr);</span>
<a name="l00089"></a>00089 <span class="preprocessor"></span>
<a name="l00090"></a>00090 <span class="comment">//wrappers for berkeley socket calls</span>
<a name="l00091"></a><a class="code" href="osclconfig__io_8h.html#a181d0a74fc9aea765edecfc3481b3b72">00091</a> <span class="preprocessor">#define OsclSetRecvBufferSize(s,val,ok,err) \</span>
<a name="l00092"></a>00092 <span class="preprocessor">        ok=(setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char*)&amp;val, sizeof(int)) !=-1);\</span>
<a name="l00093"></a>00093 <span class="preprocessor">        if (!ok)err=errno</span>
<a name="l00094"></a>00094 <span class="preprocessor"></span>
<a name="l00095"></a><a class="code" href="osclconfig__io_8h.html#ace05a9bb206cf2b84ae20f510c455938">00095</a> <span class="preprocessor">#define OsclBind(s,addr,ok,err)\</span>
<a name="l00096"></a>00096 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
<a name="l00097"></a>00097 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
<a name="l00098"></a>00098 <span class="preprocessor">    ok=(bind(s,sadr,sizeof(addr))!=(-1));\</span>
<a name="l00099"></a>00099 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00100"></a>00100 <span class="preprocessor"></span>
<a name="l00101"></a><a class="code" href="osclconfig__io_8h.html#a723ee2682cd434c576f8f1e37ffd5a88">00101</a> <span class="preprocessor">#define OsclSetSockOpt(s,optLevel,optName,optVal,optLen,ok,err)\</span>
<a name="l00102"></a>00102 <span class="preprocessor">    ok=(setsockopt(s,optLevel,optName,OSCL_STATIC_CAST(const char*,optVal),optLen) != (-1));\</span>
<a name="l00103"></a>00103 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00104"></a><a class="code" href="osclconfig__io_8h.html#ae2406fc7c9da99674c124a697813241f">00104</a> <span class="preprocessor"></span><span class="preprocessor">#define OsclJoin(s,addr,ok,err)\</span>
<a name="l00105"></a>00105 <span class="preprocessor">{\</span>
<a name="l00106"></a>00106 <span class="preprocessor">        struct ip_mreq mreq; \</span>
<a name="l00107"></a>00107 <span class="preprocessor">            void* p = &amp;addr; \</span>
<a name="l00108"></a>00108 <span class="preprocessor">        ok=(bind(s,(sockaddr*)p,sizeof(addr))!=(-1));\</span>
<a name="l00109"></a>00109 <span class="preprocessor">        mreq.imr_multiaddr.s_addr = addr.sin_addr.s_addr ; \</span>
<a name="l00110"></a>00110 <span class="preprocessor">        mreq.imr_interface.s_addr = htonl(INADDR_ANY); \</span>
<a name="l00111"></a>00111 <span class="preprocessor">        ok=(setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &amp;mreq, sizeof(struct ip_mreq))!=(-1)); \</span>
<a name="l00112"></a>00112 <span class="preprocessor">        if (!ok)err=errno;\</span>
<a name="l00113"></a>00113 <span class="preprocessor">}</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span>
<a name="l00115"></a>00115 
<a name="l00116"></a><a class="code" href="osclconfig__io_8h.html#ab55ec97d9eb5a39833067ef3dbafaf6b">00116</a> <span class="preprocessor">#define OsclListen(s,size,ok,err)\</span>
<a name="l00117"></a>00117 <span class="preprocessor">    ok=(listen(iSocket,qSize)!=(-1));\</span>
<a name="l00118"></a>00118 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00119"></a>00119 <span class="preprocessor"></span>
<a name="l00120"></a><a class="code" href="osclconfig__io_8h.html#a3aaabe08fcc9a7c547f681168c7b497b">00120</a> <span class="preprocessor">#define OsclAccept(s,accept_s,ok,err,wouldblock)\</span>
<a name="l00121"></a>00121 <span class="preprocessor">    accept_s=accept(s,NULL,NULL);\</span>
<a name="l00122"></a>00122 <span class="preprocessor">    ok=(accept_s!=(-1));\</span>
<a name="l00123"></a>00123 <span class="preprocessor">    if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
<a name="l00124"></a>00124 <span class="preprocessor"></span>
<a name="l00125"></a><a class="code" href="osclconfig__io_8h.html#acfdc3d1983d502517525f07ad672e254">00125</a> <span class="preprocessor">#define OsclSetNonBlocking(s,ok,err)\</span>
<a name="l00126"></a>00126 <span class="preprocessor">    ok=(fcntl(s,F_SETFL,O_NONBLOCK)!=(-1));\</span>
<a name="l00127"></a>00127 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00128"></a>00128 <span class="preprocessor"></span>
<a name="l00129"></a><a class="code" href="osclconfig__io_8h.html#a4810b4849fae8648cd87b1ddc1654e9e">00129</a> <span class="preprocessor">#define OsclShutdown(s,how,ok,err)\</span>
<a name="l00130"></a>00130 <span class="preprocessor">    ok=(shutdown(iSocket,how)!=(-1));\</span>
<a name="l00131"></a>00131 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00132"></a>00132 <span class="preprocessor"></span>
<a name="l00133"></a><a class="code" href="osclconfig__io_8h.html#a4bf73d95eacaf09e38e4d1b753400312">00133</a> <span class="preprocessor">#define OsclSocket(s,fam,type,prot,ok,err)\</span>
<a name="l00134"></a>00134 <span class="preprocessor">    s=socket(fam,type,prot);\</span>
<a name="l00135"></a>00135 <span class="preprocessor">    ok=(s!=(-1));\</span>
<a name="l00136"></a>00136 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00137"></a>00137 <span class="preprocessor"></span>
<a name="l00138"></a><a class="code" href="osclconfig__io_8h.html#a5446d228d26e47b4c8989656d29e453c">00138</a> <span class="preprocessor">#define OsclSendTo(s,buf,len,addr,ok,err,nbytes,wouldblock)\</span>
<a name="l00139"></a>00139 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
<a name="l00140"></a>00140 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
<a name="l00141"></a>00141 <span class="preprocessor">    nbytes=sendto(s,(const void*)(buf),(size_t)(len),0,sadr,(socklen_t)sizeof(addr));\</span>
<a name="l00142"></a>00142 <span class="preprocessor">    ok=(nbytes!=(-1));\</span>
<a name="l00143"></a>00143 <span class="preprocessor">    if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
<a name="l00144"></a>00144 <span class="preprocessor"></span>
<a name="l00145"></a><a class="code" href="osclconfig__io_8h.html#ad1d7ed58aafca062379d38737c26063c">00145</a> <span class="preprocessor">#define OsclSend(s,buf,len,ok,err,nbytes,wouldblock)\</span>
<a name="l00146"></a>00146 <span class="preprocessor">    nbytes=send(s,(const void*)(buf),(size_t)(len),0);\</span>
<a name="l00147"></a>00147 <span class="preprocessor">    ok=(nbytes!=(-1));\</span>
<a name="l00148"></a>00148 <span class="preprocessor">    if (!ok){err=errno;wouldblock=(err==EAGAIN||err==EWOULDBLOCK);}</span>
<a name="l00149"></a>00149 <span class="preprocessor"></span>
<a name="l00150"></a><a class="code" href="osclconfig__io_8h.html#acd0f7071b8ddd75c5c21af56f5ea4b38">00150</a> <span class="preprocessor">#define OsclCloseSocket(s,ok,err)\</span>
<a name="l00151"></a>00151 <span class="preprocessor">    ok=(close(s)!=(-1));\</span>
<a name="l00152"></a>00152 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00153"></a>00153 <span class="preprocessor"></span>
<a name="l00154"></a><a class="code" href="osclconfig__io_8h.html#a9313687aaf734fa96396adb5b1e5d2c8">00154</a> <span class="preprocessor">#define OsclConnect(s,addr,ok,err,wouldblock)\</span>
<a name="l00155"></a>00155 <span class="preprocessor">    TOsclSockAddr* tmpadr = &amp;addr;\</span>
<a name="l00156"></a>00156 <span class="preprocessor">    sockaddr* sadr = OSCL_STATIC_CAST(sockaddr*, tmpadr);\</span>
<a name="l00157"></a>00157 <span class="preprocessor">    ok=(connect(s,sadr,sizeof(addr))!=(-1));\</span>
<a name="l00158"></a>00158 <span class="preprocessor">    if (!ok){err=errno;wouldblock=(err==EINPROGRESS);}</span>
<a name="l00159"></a><a class="code" href="osclconfig__io_8h.html#a030a150ebdfb8dee71f0e7f430c52ee5">00159</a> <span class="preprocessor"></span><span class="preprocessor">#define OsclGetPeerName(s,name,namelen,ok,err)\</span>
<a name="l00160"></a>00160 <span class="preprocessor">    ok=(getpeername(s,(sockaddr*)&amp;name,(socklen_t*)&amp;namelen) != (-1) );\</span>
<a name="l00161"></a>00161 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00162"></a>00162 <span class="preprocessor"></span>
<a name="l00163"></a><a class="code" href="osclconfig__io_8h.html#a16356b0610e05ce2d4221a452f7d73ef">00163</a> <span class="preprocessor">#define OsclGetAsyncSockErr(s,ok,err)\</span>
<a name="l00164"></a>00164 <span class="preprocessor">    int opterr;socklen_t optlen=sizeof(opterr);\</span>
<a name="l00165"></a>00165 <span class="preprocessor">    ok=(getsockopt(s,SOL_SOCKET,SO_ERROR,(void *)&amp;opterr,&amp;optlen)!=(-1));\</span>
<a name="l00166"></a>00166 <span class="preprocessor">    if(ok)err=opterr;else err=errno;</span>
<a name="l00167"></a>00167 <span class="preprocessor"></span>
<a name="l00168"></a><a class="code" href="osclconfig__io_8h.html#a91f2f501201127af20a4e2b993b2d50d">00168</a> <span class="preprocessor">#define OsclPipe(x)         pipe(x)</span>
<a name="l00169"></a><a class="code" href="osclconfig__io_8h.html#a122adca86aff919c02ebc8273040fe09">00169</a> <span class="preprocessor"></span><span class="preprocessor">#define OsclReadFD(fd,buf,cnt)  read(fd,buf,cnt)</span>
<a name="l00170"></a><a class="code" href="osclconfig__io_8h.html#a1f6fcdb776c988fa74571fd1181e301d">00170</a> <span class="preprocessor"></span><span class="preprocessor">#define OsclWriteFD(fd,buf,cnt) write(fd,buf,cnt)</span>
<a name="l00171"></a>00171 <span class="preprocessor"></span>
<a name="l00172"></a>00172 <span class="comment">//unix reports connect completion in write set in the getsockopt</span>
<a name="l00173"></a>00173 <span class="comment">//error.</span>
<a name="l00174"></a><a class="code" href="osclconfig__io_8h.html#a7aeeb9fb518d5ca0348c93d1f8f7c55a">00174</a> <span class="preprocessor">#define OsclConnectComplete(s,wset,eset,success,fail,ok,err)\</span>
<a name="l00175"></a>00175 <span class="preprocessor">    success=fail=false;\</span>
<a name="l00176"></a>00176 <span class="preprocessor">    if (FD_ISSET(s,&amp;eset))\</span>
<a name="l00177"></a>00177 <span class="preprocessor">    {fail=true;OsclGetAsyncSockErr(s,ok,err);}\</span>
<a name="l00178"></a>00178 <span class="preprocessor">    else if (FD_ISSET(s,&amp;wset))\</span>
<a name="l00179"></a>00179 <span class="preprocessor">    {OsclGetAsyncSockErr(s,ok,err);if (ok &amp;&amp; err==0)success=true;else fail=true;}</span>
<a name="l00180"></a>00180 <span class="preprocessor"></span>
<a name="l00181"></a><a class="code" href="osclconfig__io_8h.html#a6533db73f0721c264efdfb0e29ad4b81">00181</a> <span class="preprocessor">#define OsclRecv(s,buf,len,ok,err,nbytes,wouldblock)\</span>
<a name="l00182"></a>00182 <span class="preprocessor">    nbytes=recv(s,(void *)(buf),(size_t)(len),0);\</span>
<a name="l00183"></a>00183 <span class="preprocessor">    ok=(nbytes!=(-1));\</span>
<a name="l00184"></a>00184 <span class="preprocessor">    if (!ok){err=errno;wouldblock=(err==EAGAIN);}</span>
<a name="l00185"></a>00185 <span class="preprocessor"></span>
<a name="l00186"></a><a class="code" href="osclconfig__io_8h.html#a1d75e52956c43e7f71ac4c37de019be4">00186</a> <span class="preprocessor">#define OsclRecvFrom(s,buf,len,paddr,paddrlen,ok,err,nbytes,wouldblock)\</span>
<a name="l00187"></a>00187 <span class="preprocessor">{\</span>
<a name="l00188"></a>00188 <span class="preprocessor">void* p=paddr;\</span>
<a name="l00189"></a>00189 <span class="preprocessor">nbytes=recvfrom(s,(void*)(buf),(size_t)(len),0,(struct sockaddr*)p,paddrlen);\</span>
<a name="l00190"></a>00190 <span class="preprocessor">    ok=(nbytes!=(-1));\</span>
<a name="l00191"></a>00191 <span class="preprocessor">    if (!ok){err=errno;wouldblock=(err==EAGAIN);}\</span>
<a name="l00192"></a>00192 <span class="preprocessor">}</span>
<a name="l00193"></a>00193 <span class="preprocessor"></span>
<a name="l00194"></a>00194 
<a name="l00195"></a><a class="code" href="osclconfig__io_8h.html#a04042fb1004490fb7cbc99842b5edb61">00195</a> <span class="preprocessor">#define OsclSocketSelect(nfds,rd,wr,ex,timeout,ok,err,nhandles)\</span>
<a name="l00196"></a>00196 <span class="preprocessor">    nhandles=select(nfds,&amp;rd,&amp;wr,&amp;ex,&amp;timeout);\</span>
<a name="l00197"></a>00197 <span class="preprocessor">    ok=(nhandles!=(-1));\</span>
<a name="l00198"></a>00198 <span class="preprocessor">    if (!ok)err=errno</span>
<a name="l00199"></a>00199 <span class="preprocessor"></span>
<a name="l00200"></a>00200 <span class="comment">//there&#39;s not really any socket startup needed on unix, but</span>
<a name="l00201"></a>00201 <span class="comment">//you need to define a signal handler for SIGPIPE to avoid</span>
<a name="l00202"></a>00202 <span class="comment">//broken pipe crashes.</span>
<a name="l00203"></a><a class="code" href="osclconfig__io_8h.html#a865e788dbe128f1358eb2642602f03aa">00203</a> <span class="preprocessor">#define OsclSocketStartup(ok)\</span>
<a name="l00204"></a>00204 <span class="preprocessor">    signal(SIGPIPE,SIG_IGN);\</span>
<a name="l00205"></a>00205 <span class="preprocessor">    ok=true</span>
<a name="l00206"></a>00206 <span class="preprocessor"></span>
<a name="l00207"></a><a class="code" href="osclconfig__io_8h.html#a1314f2a889502cfdbca14096a088d414">00207</a> <span class="preprocessor">#define OsclSocketCleanup(ok)\</span>
<a name="l00208"></a>00208 <span class="preprocessor">    signal(SIGPIPE,SIG_DFL);\</span>
<a name="l00209"></a>00209 <span class="preprocessor">    ok=true</span>
<a name="l00210"></a>00210 <span class="preprocessor"></span>
<a name="l00211"></a>00211 <span class="comment">//hostent type</span>
<a name="l00212"></a><a class="code" href="osclconfig__io_8h.html#a814268bf57b8246dce4a04e04476f7f4">00212</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>hostent <a class="code" href="osclconfig__io_8h.html#a814268bf57b8246dce4a04e04476f7f4">TOsclHostent</a>;
<a name="l00213"></a>00213 
<a name="l00214"></a>00214 <span class="comment">//wrapper for gethostbyname</span>
<a name="l00215"></a><a class="code" href="osclconfig__io_8h.html#ab88b3a08bc85bc4ee6250205263ab8c5">00215</a> <span class="preprocessor">#define OsclGethostbyname(name,hostent,ok,err)\</span>
<a name="l00216"></a>00216 <span class="preprocessor">    hostent=gethostbyname((const char*)name);\</span>
<a name="l00217"></a>00217 <span class="preprocessor">    ok=(hostent!=NULL);\</span>
<a name="l00218"></a>00218 <span class="preprocessor">    if (!ok)err=errno;</span>
<a name="l00219"></a>00219 <span class="preprocessor"></span>
<a name="l00220"></a>00220 <span class="comment">//extract dotted address from a hostent</span>
<a name="l00221"></a><a class="code" href="osclconfig__io_8h.html#a3f977daaad2a392b93af0b024b32f032">00221</a> <span class="preprocessor">#define OsclGetDottedAddr(hostent,dottedaddr,ok)\</span>
<a name="l00222"></a>00222 <span class="preprocessor">    long *_hostaddr=(long*)hostent-&gt;h_addr_list[0];\</span>
<a name="l00223"></a>00223 <span class="preprocessor">    struct in_addr _inaddr;\</span>
<a name="l00224"></a>00224 <span class="preprocessor">    _inaddr.s_addr=*_hostaddr;\</span>
<a name="l00225"></a>00225 <span class="preprocessor">    dottedaddr=inet_ntoa(_inaddr);\</span>
<a name="l00226"></a>00226 <span class="preprocessor">    ok=(dottedaddr!=NULL);</span>
<a name="l00227"></a>00227 <span class="preprocessor"></span>
<a name="l00228"></a>00228 <span class="comment">//extract dotted address from a hostent into the vector of OsclNetworkAddress</span>
<a name="l00229"></a><a class="code" href="osclconfig__io_8h.html#a224c4bc1e415d25e4af2d436fab95596">00229</a> <span class="preprocessor">#define OsclGetDottedAddrVector(hostent,dottedaddr,dottedaddrvect,ok)\</span>
<a name="l00230"></a>00230 <span class="preprocessor">    if(dottedaddrvect)\</span>
<a name="l00231"></a>00231 <span class="preprocessor">    {\</span>
<a name="l00232"></a>00232 <span class="preprocessor">    long **_addrlist=(long**)hostent-&gt;h_addr_list;\</span>
<a name="l00233"></a>00233 <span class="preprocessor">    for(int i = 0; _addrlist[i] != NULL; i++){\</span>
<a name="l00234"></a>00234 <span class="preprocessor">        struct in_addr _inaddr;\</span>
<a name="l00235"></a>00235 <span class="preprocessor">        _inaddr.s_addr=*_addrlist[i];\</span>
<a name="l00236"></a>00236 <span class="preprocessor">        OsclNetworkAddress addr(inet_ntoa(_inaddr), 0);\</span>
<a name="l00237"></a>00237 <span class="preprocessor">        dottedaddrvect-&gt;push_back(addr);\</span>
<a name="l00238"></a>00238 <span class="preprocessor">    }\</span>
<a name="l00239"></a>00239 <span class="preprocessor">    if (!dottedaddrvect-&gt;empty())\</span>
<a name="l00240"></a>00240 <span class="preprocessor">        {dottedaddr-&gt;port = dottedaddrvect-&gt;front().port; dottedaddr-&gt;ipAddr.Set(dottedaddrvect-&gt;front().ipAddr.Str());}\</span>
<a name="l00241"></a>00241 <span class="preprocessor">    ok=(!dottedaddrvect-&gt;empty() &amp;&amp; (((*dottedaddrvect)[0]).ipAddr.Str() != NULL));\</span>
<a name="l00242"></a>00242 <span class="preprocessor">    }\</span>
<a name="l00243"></a>00243 <span class="preprocessor">    else\</span>
<a name="l00244"></a>00244 <span class="preprocessor">    {\</span>
<a name="l00245"></a>00245 <span class="preprocessor">        char *add;\</span>
<a name="l00246"></a>00246 <span class="preprocessor">        OsclGetDottedAddr(hostent,add,ok);\</span>
<a name="l00247"></a>00247 <span class="preprocessor">        if(ok) dottedaddr-&gt;ipAddr.Set(add);\</span>
<a name="l00248"></a>00248 <span class="preprocessor">    }</span>
<a name="l00249"></a>00249 <span class="preprocessor"></span>
<a name="l00250"></a>00250 <span class="comment">//socket shutdown codes</span>
<a name="l00251"></a><a class="code" href="osclconfig__io_8h.html#a70110e8d16bafe99a8bf933b73cb04e7">00251</a> <span class="preprocessor">#define OSCL_SD_RECEIVE SHUT_RD</span>
<a name="l00252"></a><a class="code" href="osclconfig__io_8h.html#a1edf752bf5061b300f50d6ba8ebfb251">00252</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SD_SEND SHUT_WR</span>
<a name="l00253"></a><a class="code" href="osclconfig__io_8h.html#ae2dd5d54b030ed65c1afd50cf16aa154">00253</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SD_BOTH SHUT_RDWR</span>
<a name="l00254"></a>00254 <span class="preprocessor"></span>
<a name="l00255"></a>00255 <span class="comment">//address family codes</span>
<a name="l00256"></a><a class="code" href="osclconfig__io_8h.html#a2d125023bf4f61b697c372bd360a50b8">00256</a> <span class="preprocessor">#define OSCL_AF_INET AF_INET</span>
<a name="l00257"></a>00257 <span class="preprocessor"></span>
<a name="l00258"></a>00258 <span class="comment">//socket type codes</span>
<a name="l00259"></a><a class="code" href="osclconfig__io_8h.html#a67374fce69150a9e5e1368603266d5cf">00259</a> <span class="preprocessor">#define OSCL_SOCK_STREAM SOCK_STREAM</span>
<a name="l00260"></a><a class="code" href="osclconfig__io_8h.html#adf60fc3eac65579fad3ba744ebb7ca37">00260</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOCK_DATAGRAM SOCK_DGRAM</span>
<a name="l00261"></a>00261 <span class="preprocessor"></span>
<a name="l00262"></a>00262 <span class="comment">//IP protocol codes</span>
<a name="l00263"></a><a class="code" href="osclconfig__io_8h.html#a1d300c4c1135adc168d8406a9c0ef360">00263</a> <span class="preprocessor">#define OSCL_IPPROTO_IP  IPPROTO_IP</span>
<a name="l00264"></a><a class="code" href="osclconfig__io_8h.html#a1bd857651ae01c9c86216ecf09badc55">00264</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_IPPROTO_TCP IPPROTO_TCP</span>
<a name="l00265"></a><a class="code" href="osclconfig__io_8h.html#a3dc1334d18959a41457411dad85c58eb">00265</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_IPPROTO_UDP IPPROTO_UDP</span>
<a name="l00266"></a>00266 <span class="preprocessor"></span>
<a name="l00267"></a>00267 <span class="comment">//Socket option Levels</span>
<a name="l00268"></a><a class="code" href="osclconfig__io_8h.html#a65bb0530132b1fb9bb0237e4f1b470f3">00268</a> <span class="preprocessor">#define OSCL_SOL_SOCKET SOL_SOCKET</span>
<a name="l00269"></a><a class="code" href="osclconfig__io_8h.html#ad43be690cc4cd1a715d94e639194acf2">00269</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOL_IP     IPPROTO_IP</span>
<a name="l00270"></a><a class="code" href="osclconfig__io_8h.html#ad1987207cc2c5d44abdc25b7e8002e07">00270</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOL_TCP    IPPROTO_TCP</span>
<a name="l00271"></a><a class="code" href="osclconfig__io_8h.html#ab790fee052a5326c072777366a9b1778">00271</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOL_UDP    IPPROTO_UDP</span>
<a name="l00272"></a>00272 <span class="preprocessor"></span>
<a name="l00273"></a>00273 <span class="comment">//Socket Option Values (level = IP)</span>
<a name="l00274"></a><a class="code" href="osclconfig__io_8h.html#a2dc87667a85426b22afaa59bb2b4c179">00274</a> <span class="preprocessor">#define OSCL_SOCKOPT_IP_MULTICAST_TTL   IP_MULTICAST_TTL</span>
<a name="l00275"></a><a class="code" href="osclconfig__io_8h.html#a129236b63ed6858e42e3d3d153faed24">00275</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOCKOPT_IP_ADDMEMBERSHIP   IP_ADD_MEMBERSHIP</span>
<a name="l00276"></a><a class="code" href="osclconfig__io_8h.html#a6d349d0756cfa6603cbcd5d21c356cb8">00276</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SOCKOPT_IP_TOS             IP_TOS</span>
<a name="l00277"></a>00277 <span class="preprocessor"></span>
<a name="l00278"></a>00278 <span class="comment">//Socket Option Values (level = Socket)</span>
<a name="l00279"></a><a class="code" href="osclconfig__io_8h.html#a77dfde1cce4f1d8cb0654a28a0292bbc">00279</a> <span class="preprocessor">#define OSCL_SOCKOPT_SOL_REUSEADDR      SO_REUSEADDR</span>
<a name="l00280"></a>00280 <span class="preprocessor"></span><span class="comment">//End sockets</span>
<a name="l00281"></a>00281 
<a name="l00282"></a>00282 <span class="comment">// file IO support</span>
<a name="l00283"></a>00283 <span class="preprocessor">#if (OSCL_HAS_LARGE_FILE_SUPPORT)</span>
<a name="l00284"></a><a class="code" href="osclconfig__io_8h.html#a97cda56383fc49167372a11658c80483">00284</a> <span class="preprocessor"></span><span class="keyword">typedef</span> off64_t <a class="code" href="osclconfig__io_8h.html#a97cda56383fc49167372a11658c80483">TOsclFileOffset</a>;
<a name="l00285"></a><a class="code" href="osclconfig__io_8h.html#ae2e368e9e35022dad95afb071e396ae4">00285</a> <span class="preprocessor">#define MAX_TOSCLFILEOFFSET_VALUE 0x7FFFFFFFFFFFFFFFLL;</span>
<a name="l00286"></a>00286 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00287"></a>00287 <span class="preprocessor"></span><span class="keyword">typedef</span> int32 <a class="code" href="osclconfig__io_8h.html#a97cda56383fc49167372a11658c80483">TOsclFileOffset</a>;
<a name="l00288"></a>00288 <span class="preprocessor">#define MAX_TOSCLFILEOFFSET_VALUE 0x7FFFFFFF;</span>
<a name="l00289"></a>00289 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00290"></a>00290 <span class="preprocessor"></span>
<a name="l00291"></a>00291 <span class="preprocessor">#include &quot;<a class="code" href="osclconfig__io__check_8h.html">osclconfig_io_check.h</a>&quot;</span>
<a name="l00292"></a>00292 
<a name="l00293"></a>00293 <span class="preprocessor">#endif</span>
<a name="l00294"></a>00294 <span class="preprocessor"></span>
</pre></div></div>
<hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: CORE_9.004.1.1 </small>
</small></address>
</body>
</html>