xref: /aoo42x/main/sal/inc/osl/socket_decl.hxx (revision 86e1cf34)
1565d668cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3565d668cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4565d668cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5565d668cSAndrew Rist  * distributed with this work for additional information
6565d668cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7565d668cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8565d668cSAndrew Rist  * "License"); you may not use this file except in compliance
9565d668cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10565d668cSAndrew Rist  *
11565d668cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12565d668cSAndrew Rist  *
13565d668cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14565d668cSAndrew Rist  * software distributed under the License is distributed on an
15565d668cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16565d668cSAndrew Rist  * KIND, either express or implied.  See the License for the
17565d668cSAndrew Rist  * specific language governing permissions and limitations
18565d668cSAndrew Rist  * under the License.
19565d668cSAndrew Rist  *
20565d668cSAndrew Rist  *************************************************************/
21565d668cSAndrew Rist 
22565d668cSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _OSL_SOCKET_DECL_HXX_
25cdf0e10cSrcweir #define _OSL_SOCKET_DECL_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <osl/socket.h>
28cdf0e10cSrcweir #include <rtl/ustring.hxx>
29cdf0e10cSrcweir #include <rtl/byteseq.hxx>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir /** @HTML
32cdf0e10cSrcweir  */
33cdf0e10cSrcweir namespace osl
34cdf0e10cSrcweir {
35cdf0e10cSrcweir 	enum __osl_socket_NoCopy { SAL_NO_COPY };
36cdf0e10cSrcweir 
37cdf0e10cSrcweir     /** The class should be understood as a reference to a socket address handle ( struct sockaddr ).
38cdf0e10cSrcweir 
39cdf0e10cSrcweir 		The handle is mutable.
40cdf0e10cSrcweir 	 */
41cdf0e10cSrcweir 	class SocketAddr
42cdf0e10cSrcweir 	{
43cdf0e10cSrcweir 	protected:
44cdf0e10cSrcweir 		oslSocketAddr m_handle;
45cdf0e10cSrcweir 	public:
46cdf0e10cSrcweir 
47cdf0e10cSrcweir 		/** Creates socket address of unknown type.
48cdf0e10cSrcweir 		 */
49cdf0e10cSrcweir 		inline SocketAddr();
50cdf0e10cSrcweir 
51cdf0e10cSrcweir 		/** Copy constructor.
52cdf0e10cSrcweir 		 */
53cdf0e10cSrcweir 		inline SocketAddr(const SocketAddr& Addr);
54cdf0e10cSrcweir 
55cdf0e10cSrcweir 		/** The SocketAddr takes over the responsibility of the handle ( which means,
56cdf0e10cSrcweir 			that the handle gets destructed by the destructor of this reference)
57cdf0e10cSrcweir 
58cdf0e10cSrcweir 			@param nocopy use SAL_NO_COPY
59cdf0e10cSrcweir 		 */
60cdf0e10cSrcweir 		inline SocketAddr(const oslSocketAddr , __osl_socket_NoCopy nocopy );
61cdf0e10cSrcweir 
62cdf0e10cSrcweir 		/** Copyconstructs the oslSocketAddr handle.
63cdf0e10cSrcweir 		 */
64cdf0e10cSrcweir 		inline SocketAddr(oslSocketAddr Addr);
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 		/** tcpip-specif constructor.
67cdf0e10cSrcweir 			@param strAddrOrHostName strAddrOrHostName hostname or dotted ip-number of the network
68cdf0e10cSrcweir 			                         interface, the socket shall be created on.
69cdf0e10cSrcweir 			@param nPort             tcp-ip port number
70cdf0e10cSrcweir 		 */
71cdf0e10cSrcweir 		inline SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort );
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 		/** destroys underlying oslSocketAddress
74cdf0e10cSrcweir 		 */
75cdf0e10cSrcweir 		inline ~SocketAddr();
76cdf0e10cSrcweir 
77cdf0e10cSrcweir 		/** checks, if the SocketAddr was created successful.
78cdf0e10cSrcweir 			@return <code>sal_True</code> if there is a valid underlying handle,
79cdf0e10cSrcweir 			        otherwise sal_False.
80cdf0e10cSrcweir 		 */
81cdf0e10cSrcweir 		inline sal_Bool is() const;
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 		/** Converts the address to a (human readable) domain-name.
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 			@param pResult 0, if you are not interested in errors,
86cdf0e10cSrcweir 			               otherwise *pResult contains an error code on failure
87cdf0e10cSrcweir 						   or osl_Socket_Ok on success
88cdf0e10cSrcweir 			@return the hostname of this SocketAddr or an empty string on failure.
89cdf0e10cSrcweir 			@see osl_getHostnameOfSocketAddr()
90cdf0e10cSrcweir 		*/
91cdf0e10cSrcweir 		inline ::rtl::OUString SAL_CALL getHostname( oslSocketResult *pResult = 0 ) const;
92cdf0e10cSrcweir 
93cdf0e10cSrcweir 		/** Sets the ipaddress or hostname of the SocketAddress
94cdf0e10cSrcweir 		 */
95cdf0e10cSrcweir 		inline sal_Bool SAL_CALL setHostname( const ::rtl::OUString &sDottedIpOrHostname );
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 		/** Returns the port number of the address.
98cdf0e10cSrcweir 			@return the port in host-byte order or or OSL_INVALID_PORT on errors.
99cdf0e10cSrcweir 		*/
100cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL getPort() const;
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 		/** Sets the port number of the address.
103cdf0e10cSrcweir 		   @return true if successfule.
104cdf0e10cSrcweir 		 */
105cdf0e10cSrcweir 		inline sal_Bool SAL_CALL setPort( sal_Int32 nPort );
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 		/** Sets the address of the underlying socket address struct in network byte order.
108cdf0e10cSrcweir 			@return true on success, false signales falure.
109cdf0e10cSrcweir 		 */
110cdf0e10cSrcweir 		inline sal_Bool SAL_CALL setAddr( const ::rtl::ByteSequence & address );
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 		/** Returns the address of the underlying socket in network byte order
113cdf0e10cSrcweir 		  */
114cdf0e10cSrcweir 		inline ::rtl::ByteSequence  SAL_CALL getAddr( oslSocketResult *pResult = 0 ) const;
115cdf0e10cSrcweir 
116cdf0e10cSrcweir 		/** assign the handle to this reference. The previous handle is released.
117cdf0e10cSrcweir 		*/
118cdf0e10cSrcweir 		inline SocketAddr & SAL_CALL operator= (oslSocketAddr Addr);
119cdf0e10cSrcweir 
120cdf0e10cSrcweir 		/**
121cdf0e10cSrcweir 		 */
122cdf0e10cSrcweir 		inline SocketAddr & SAL_CALL operator= (const SocketAddr& Addr);
123cdf0e10cSrcweir 
124cdf0e10cSrcweir 		/** Assigns the socket addr without copyconstructing it.
125cdf0e10cSrcweir 			@param nocopy use SAL_NO_COPY
126cdf0e10cSrcweir 		  */
127cdf0e10cSrcweir 		inline SocketAddr & SAL_CALL assign( oslSocketAddr Addr, __osl_socket_NoCopy nocopy );
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 		/** Returns true if the underlying handle is identical to the Addr handle.
130cdf0e10cSrcweir 		 */
131cdf0e10cSrcweir 		inline sal_Bool SAL_CALL operator== (oslSocketAddr Addr) const;
132cdf0e10cSrcweir 
133cdf0e10cSrcweir 		/** Returns true if the underlying handle is identical to the Addr handle.
134cdf0e10cSrcweir 		 */
135cdf0e10cSrcweir 		inline sal_Bool SAL_CALL operator== (const SocketAddr & Addr) const;
136cdf0e10cSrcweir 
137cdf0e10cSrcweir 		/** Returns the underlying SocketAddr handle without copyconstructing it.
138cdf0e10cSrcweir 		 */
139cdf0e10cSrcweir 		inline oslSocketAddr SAL_CALL getHandle() const;
140cdf0e10cSrcweir 
141cdf0e10cSrcweir 		/** Get the hostname for the local interface.
142cdf0e10cSrcweir 			@param after the call *pResult contains osl_Socket_Ok on success or
143cdf0e10cSrcweir 			       an error on failure.
144cdf0e10cSrcweir 			@return the hostname
145cdf0e10cSrcweir 		*/
146cdf0e10cSrcweir 		static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = 0);
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 		/** Tries to find an address for a host.
149cdf0e10cSrcweir 			@see osl_resolveHostname()
150cdf0e10cSrcweir 			@return A new created socket-address or 0 if the name could not be found.
151cdf0e10cSrcweir 		*/
152cdf0e10cSrcweir 		static inline void SAL_CALL resolveHostname(
153cdf0e10cSrcweir 			const ::rtl::OUString & strHostName , SocketAddr & Addr );
154cdf0e10cSrcweir 
155cdf0e10cSrcweir 		/**
156cdf0e10cSrcweir 		   Tries to find the port associated with the given service/protocol-
157cdf0e10cSrcweir 		   pair (e.g. "ftp"/"tcp").
158cdf0e10cSrcweir 		   @return the port number in host-byte order or <code>OSL_INVALID_PORT</code>
159cdf0e10cSrcweir 		   if no service/protocol pair could be found.
160cdf0e10cSrcweir 		*/
161cdf0e10cSrcweir 		static inline sal_Int32 SAL_CALL getServicePort(
162cdf0e10cSrcweir 			const ::rtl::OUString& strServiceName,
163cdf0e10cSrcweir 			const ::rtl::OUString & strProtocolName= ::rtl::OUString::createFromAscii( "tcp" ) );
164cdf0e10cSrcweir 	};
165cdf0e10cSrcweir 
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	class Socket
168cdf0e10cSrcweir 	{
169cdf0e10cSrcweir 	protected:
170cdf0e10cSrcweir 		oslSocket m_handle;
171cdf0e10cSrcweir 	protected:
172cdf0e10cSrcweir 		/** Creates a socket. Note it's protected.
173cdf0e10cSrcweir 			@param Type
174cdf0e10cSrcweir 			@param Family
175cdf0e10cSrcweir 			@param Protocol
176cdf0e10cSrcweir 		*/
177cdf0e10cSrcweir 		inline Socket(oslSocketType Type,
178cdf0e10cSrcweir 					  oslAddrFamily Family = osl_Socket_FamilyInet,
179cdf0e10cSrcweir 					  oslProtocol   Protocol = osl_Socket_ProtocolIp);
180cdf0e10cSrcweir 	public:
181cdf0e10cSrcweir 		inline Socket( );
182cdf0e10cSrcweir 
183cdf0e10cSrcweir 		inline Socket( const Socket & socket );
184cdf0e10cSrcweir 
185cdf0e10cSrcweir 		inline Socket( oslSocket socketHandle );
186cdf0e10cSrcweir 
187cdf0e10cSrcweir 		/** The instance takes over the handle's ownership without acquiring the
188cdf0e10cSrcweir 			handle, but releases it within the dtor.
189cdf0e10cSrcweir 			@param noacquire use SAL_NO_ACQUIRE
190cdf0e10cSrcweir 		 */
191cdf0e10cSrcweir 		inline Socket( oslSocket socketHandle, __sal_NoAcquire noacquire );
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 		/** Destructor. Releases the underlying handle
194cdf0e10cSrcweir 		 */
195cdf0e10cSrcweir 		inline ~Socket();
196cdf0e10cSrcweir 
197cdf0e10cSrcweir 		/** Assignment operator. If socket was already created, the old one will
198cdf0e10cSrcweir 			be discarded.
199cdf0e10cSrcweir 		*/
200cdf0e10cSrcweir 		inline Socket& SAL_CALL operator= ( oslSocket socketHandle);
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 		/** Assignment operator. If socket was already created, the old one will
203cdf0e10cSrcweir 			be discarded.
204cdf0e10cSrcweir 		*/
205cdf0e10cSrcweir 		inline Socket& SAL_CALL operator= (const Socket& sock);
206cdf0e10cSrcweir 
207cdf0e10cSrcweir 		/**
208cdf0e10cSrcweir 		   @return <code>sal_True</code>, when the underlying handle of both
209cdf0e10cSrcweir 		                 Socket instances are identical, <code>sal_False</code> otherwise.
210cdf0e10cSrcweir 		 */
211cdf0e10cSrcweir 		inline sal_Bool SAL_CALL operator==( const Socket& rSocket ) const ;
212cdf0e10cSrcweir 
213cdf0e10cSrcweir 		/**
214cdf0e10cSrcweir 		   @return <code>sal_True</code>, when the underlying handle of both
215cdf0e10cSrcweir 		                 Socket instances are identical, <code>sal_False</code> otherwise.
216cdf0e10cSrcweir 		 */
217cdf0e10cSrcweir 		inline sal_Bool SAL_CALL operator==( const oslSocket socketHandle ) const;
218cdf0e10cSrcweir 
219cdf0e10cSrcweir 		/** Closes a definite or both directions of the bidirectional stream.
220cdf0e10cSrcweir 
221cdf0e10cSrcweir 		   @param Direction
222cdf0e10cSrcweir 		   @see osl_shutdownSocket()
223cdf0e10cSrcweir 		 */
224cdf0e10cSrcweir 		inline void SAL_CALL shutdown( oslSocketDirection Direction = osl_Socket_DirReadWrite );
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 		/** Closes a socket.
227cdf0e10cSrcweir 			Note that closing a socket is identical to shutdown( osl_Socket_DirReadWrite ),
228cdf0e10cSrcweir 			as the operating system distinguish both cases, both functions or offered in this API.
229cdf0e10cSrcweir 			@see osl_closeSocket()
230cdf0e10cSrcweir 		 */
231cdf0e10cSrcweir 		inline void SAL_CALL close();
232cdf0e10cSrcweir 
233cdf0e10cSrcweir 		/** Retrieves the address of the local interface of this socket.
234cdf0e10cSrcweir 			@param Addr [out] receives the address.
235cdf0e10cSrcweir 			@see osl_getLocalAddrOfSocket()
236cdf0e10cSrcweir 		*/
237cdf0e10cSrcweir 		inline void SAL_CALL getLocalAddr( SocketAddr &Addr ) const;
238cdf0e10cSrcweir 
239cdf0e10cSrcweir 		/** Get the local port of the socket. Usually used after bind().
240cdf0e10cSrcweir 			@return the port number or OSL_INVALID_PORT on errors.
241cdf0e10cSrcweir 		*/
242cdf0e10cSrcweir 		inline sal_Int32	SAL_CALL getLocalPort() const;
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 		/** Get the hostname for the local interface.
245cdf0e10cSrcweir 			@return the hostname or an empty string ("").
246cdf0e10cSrcweir 		*/
247cdf0e10cSrcweir 		inline ::rtl::OUString SAL_CALL getLocalHost() const;
248cdf0e10cSrcweir 
249cdf0e10cSrcweir 		/** Retrieves the address of the remote host of this socket.
250cdf0e10cSrcweir 			@param Addr [out] receives the address.
251cdf0e10cSrcweir 		*/
252cdf0e10cSrcweir 		inline void SAL_CALL getPeerAddr( SocketAddr & Addr) const;
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 		/** Get the remote port of the socket.
255cdf0e10cSrcweir 			@return the port number or OSL_INVALID_PORT on errors.
256cdf0e10cSrcweir 		*/
257cdf0e10cSrcweir 		inline sal_Int32	SAL_CALL getPeerPort() const;
258cdf0e10cSrcweir 
259cdf0e10cSrcweir 		/** Get the hostname for the remote interface.
260cdf0e10cSrcweir 			@return the hostname or an empty string ("").
261cdf0e10cSrcweir 		*/
262cdf0e10cSrcweir 		inline ::rtl::OUString SAL_CALL getPeerHost() const;
263cdf0e10cSrcweir 
264cdf0e10cSrcweir 		/** Binds the socket to the specified (local) interface.
265cdf0e10cSrcweir 			@param LocalInterface Address of the Interface
266cdf0e10cSrcweir 			@return True if bind was successful.
267cdf0e10cSrcweir 		*/
268cdf0e10cSrcweir 		inline sal_Bool SAL_CALL bind(const SocketAddr& LocalInterface);
269cdf0e10cSrcweir 
270cdf0e10cSrcweir 		/** Checks if read operations will block.
271cdf0e10cSrcweir 
272cdf0e10cSrcweir 			You can specify a timeout-value in seconds/nanoseconds that denotes
273cdf0e10cSrcweir 			how the operation will block if the Socket is not ready.
274cdf0e10cSrcweir 			@return <code>sal_True</code> if read operations (recv, recvFrom, accept) on the Socket
275*86e1cf34SPedro Giffuni 			will NOT block; <code>sal_False</code> if it would block or if an error occurred.
276cdf0e10cSrcweir 
277cdf0e10cSrcweir 			@param pTimeout if 0, the operation will block without a timeout. Otherwise
278cdf0e10cSrcweir 			the specified amout of time.
279cdf0e10cSrcweir 		*/
280cdf0e10cSrcweir 		inline sal_Bool	SAL_CALL isRecvReady(const TimeValue *pTimeout = 0) const;
281cdf0e10cSrcweir 
282cdf0e10cSrcweir 		/** Checks if send operations will block.
283cdf0e10cSrcweir 
284cdf0e10cSrcweir 			You can specify a timeout-value in seconds/nanoseconds that denotes
285cdf0e10cSrcweir 			how the operation will block if the Socket is not ready.
286cdf0e10cSrcweir 			@return <code>sal_True</code> if send operations (send, sendTo) on the Socket
287*86e1cf34SPedro Giffuni 			will NOT block; <code>sal_False</code> if it would block or if an error occurred.
288cdf0e10cSrcweir 
289cdf0e10cSrcweir 			@param pTimeout if 0, the operation will block without a timeout. Otherwise
290cdf0e10cSrcweir 			the specified amout of time.
291cdf0e10cSrcweir 		*/
292cdf0e10cSrcweir 		inline sal_Bool	SAL_CALL isSendReady(const TimeValue *pTimeout = 0) const;
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 		/** Checks if a request for out-of-band data will block.
296cdf0e10cSrcweir 
297cdf0e10cSrcweir 			You can specify a timeout-value in seconds/nanoseconds that denotes
298cdf0e10cSrcweir 			how the operation will block if the Socket has no pending OOB data.
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 			@return <code>sal_True</code> if OOB-request operations (recv with appropriate flags)
301cdf0e10cSrcweir 			on the Socket will NOT block; <code>sal_False</code> if it would block or if
302*86e1cf34SPedro Giffuni 			an error occurred.
303cdf0e10cSrcweir 
304cdf0e10cSrcweir 			@param pTimeout if 0, the operation will block without a timeout. Otherwise
305cdf0e10cSrcweir 			the specified amout of time.
306cdf0e10cSrcweir 		*/
307cdf0e10cSrcweir 		inline sal_Bool	SAL_CALL isExceptionPending(const TimeValue *pTimeout = 0) const;
308cdf0e10cSrcweir 
309cdf0e10cSrcweir 
310cdf0e10cSrcweir 		/** Queries the socket for its type.
311cdf0e10cSrcweir 	        @return one of:
312cdf0e10cSrcweir 			<ul>
313cdf0e10cSrcweir 			<li> <code>osl_Socket_TypeStream</code>
314cdf0e10cSrcweir 			<li> <code>osl_Socket_TypeDgram</code>
315cdf0e10cSrcweir 			<li> <code>osl_Socket_TypeRaw</code>
316cdf0e10cSrcweir 			<li> <code>osl_Socket_TypeRdm</code>
317cdf0e10cSrcweir 			<li> <code>osl_Socket_TypeSeqPacket</code>
318*86e1cf34SPedro Giffuni 			<li> <code>osl_invalid_SocketType</code>, if an error occurred
319cdf0e10cSrcweir 			</ul>
320cdf0e10cSrcweir 		*/
321cdf0e10cSrcweir 		inline oslSocketType	SAL_CALL getType() const;
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 		/** Retrieves option-attributes associated with the socket.
324cdf0e10cSrcweir 			@param Option The attribute to query.
325cdf0e10cSrcweir 			Valid values (depending on the Level) are:
326cdf0e10cSrcweir 			<ul>
327cdf0e10cSrcweir 			<li> <code>osl_Socket_Option_Debug</code><br>
328cdf0e10cSrcweir 			     (sal_Bool) Socket debug flag 1 = enabled, 0 = disabled.
329cdf0e10cSrcweir 
330cdf0e10cSrcweir 			<li> <code>osl_Socket_OptionAcceptConn</code><br>
331cdf0e10cSrcweir 			<li> <code>osl_Socket_OptionReuseAddr</code><br>
332cdf0e10cSrcweir 			  (sal_Bool) Allows the socket to be bound to an address that is
333cdf0e10cSrcweir 			  already in use.
334cdf0e10cSrcweir 			  1 = multiple bound allowed, 0 = no multiple bounds allowed
335cdf0e10cSrcweir 
336cdf0e10cSrcweir 			<li><code>osl_Socket_OptionKeepAlive</code><br>
337cdf0e10cSrcweir 			   (sal_Bool) Keepalive packets are sent by the underlying socket.
338cdf0e10cSrcweir 			   1 = enabled, 0 = disabled
339cdf0e10cSrcweir 
340cdf0e10cSrcweir 			<li><code>osl_Socket_OptionDontRoute</code><br>
341cdf0e10cSrcweir 			   (sal_Bool) Do not route: send directly to interface.
342cdf0e10cSrcweir            	   1 = do not route , 0 = routing possible
343cdf0e10cSrcweir 
344cdf0e10cSrcweir 			<li><code>osl_Socket_OptionBroadcast</code><br>
345cdf0e10cSrcweir 			   (sal_Bool) Transmission of broadcast messages are allowed on the socket.
346cdf0e10cSrcweir 			   1 = transmission allowed, 0 = transmission disallowed
347cdf0e10cSrcweir 
348cdf0e10cSrcweir 			<li><code>osl_Socket_OptionUseLoopback</code><br>
349cdf0e10cSrcweir 
350cdf0e10cSrcweir 			<li><code>osl_Socket_OptionLinger</code><br>
351cdf0e10cSrcweir 			   (linger) Linger on close if unsent data is present.
352cdf0e10cSrcweir 			   linger has two members: l_onoff, l_linger
353cdf0e10cSrcweir 			   l_onoff = 0 is off, l_onoff > 0 and l_linger= timeout in seconds.
354cdf0e10cSrcweir 
355cdf0e10cSrcweir 			<li><code>osl_Socket_OptionOOBinLine</code><br>
356cdf0e10cSrcweir 
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 			<li><code>osl_Socket_OptionSndBuf</code><br>
359cdf0e10cSrcweir 			  (sal_Int32) Size of the send buffer in bytes. Data is sent after
360cdf0e10cSrcweir 			  SndTimeo or when the buffer is full. This allows faster writing
361cdf0e10cSrcweir 			  to the socket.
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 			<li><code>osl_Socket_OptionRcvBuf</code><br>
364cdf0e10cSrcweir 			  (sal_Int32) Size of the receive buffer in bytes. Data is sent after
365cdf0e10cSrcweir 			  SndTimeo or when the buffer is full. This allows faster writing
366cdf0e10cSrcweir 			  to the socket and larger packet sizes.
367cdf0e10cSrcweir 
368cdf0e10cSrcweir 			<li><code>osl_Socket_OptionSndLowat</code><br>
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 			<li><code>osl_Socket_OptionRcvLowat</code><br>
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 			<li><code>osl_Socket_OptionSndTimeo</code><br>
373cdf0e10cSrcweir 			  (sal_Int32) Data is sent after this timeout. This allows gathering
374cdf0e10cSrcweir 			  of data to send larger packages but increases latency times.
375cdf0e10cSrcweir 
376cdf0e10cSrcweir 			<li><code>osl_Socket_OptionRcvTimeo</code><br>
377cdf0e10cSrcweir 
378cdf0e10cSrcweir 			<li><code>osl_Socket_OptionError</code><br>
379cdf0e10cSrcweir 			<li><code>osl_Socket_OptionType</code><br>
380cdf0e10cSrcweir 
381cdf0e10cSrcweir 			<li><code>osl_Socket_OptionTcpNoDelay</code><br>
382cdf0e10cSrcweir 			  Disables the Nagle algorithm for send coalescing. (Do not
383*86e1cf34SPedro Giffuni 			  collect data until a packet is full, instead send immediately.
384cdf0e10cSrcweir 			  This increases network traffic but might improve latency-times.)
385cdf0e10cSrcweir 			  1 = disables the algorithm, 0 = keeps it enabled.
386cdf0e10cSrcweir 			</ul>
387cdf0e10cSrcweir 
388cdf0e10cSrcweir 			  If not above mentioned otherwise, the options are only valid for
389cdf0e10cSrcweir 			  level <code>osl_Socket_LevelSocket</code>.
390cdf0e10cSrcweir 			@param pBuffer The Buffer will be filled with the attribute.
391cdf0e10cSrcweir 
392cdf0e10cSrcweir 			@param BufferSize The size of pBuffer.
393cdf0e10cSrcweir 
394cdf0e10cSrcweir 			@param Level The option level.
395cdf0e10cSrcweir 
396cdf0e10cSrcweir 			Valid values are:
397cdf0e10cSrcweir 			<ul>
398cdf0e10cSrcweir 			<li><code>osl_Socket_LevelSocket</code> : Socket Level
399cdf0e10cSrcweir 			<li><code>osl_Socket_LevelTcp</code>    : Level of Transmission Control Protocol
400cdf0e10cSrcweir 			</ul>
401cdf0e10cSrcweir 			@return The size of the attribute copied into pBuffer or -1 if an error
402*86e1cf34SPedro Giffuni 			occurred.
403cdf0e10cSrcweir 		*/
404cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL getOption(
405cdf0e10cSrcweir 			oslSocketOption Option,
406cdf0e10cSrcweir 			void* pBuffer,
407cdf0e10cSrcweir 			sal_uInt32 BufferLen,
408cdf0e10cSrcweir 			oslSocketOptionLevel Level= osl_Socket_LevelSocket) const;
409cdf0e10cSrcweir 
410cdf0e10cSrcweir 		/** Sets the sockets attributes.
411cdf0e10cSrcweir 
412cdf0e10cSrcweir 			@param Option denotes the option to modify.
413cdf0e10cSrcweir 			Valid values (depending on the Level) are:
414cdf0e10cSrcweir 			<ul>
415cdf0e10cSrcweir 			<li> osl_Socket_Option_Debug
416cdf0e10cSrcweir 			<li> osl_Socket_OptionAcceptConn
417cdf0e10cSrcweir 			<li> osl_Socket_OptionReuseAddr
418cdf0e10cSrcweir 			<li> osl_Socket_OptionKeepAlive
419cdf0e10cSrcweir 			<li> osl_Socket_OptionDontRoute
420cdf0e10cSrcweir 			<li> osl_Socket_OptionBroadcast
421cdf0e10cSrcweir 			<li> osl_Socket_OptionUseLoopback
422cdf0e10cSrcweir 			<li> osl_Socket_OptionLinger
423cdf0e10cSrcweir 			<li> osl_Socket_OptionOOBinLine
424cdf0e10cSrcweir 			<li> osl_Socket_OptionSndBuf
425cdf0e10cSrcweir 			<li> osl_Socket_OptionRcvBuf
426cdf0e10cSrcweir 			<li> osl_Socket_OptionSndLowat
427cdf0e10cSrcweir 			<li> osl_Socket_OptionRcvLowat
428cdf0e10cSrcweir 			<li> osl_Socket_OptionSndTimeo
429cdf0e10cSrcweir 			<li> osl_Socket_OptionRcvTimeo
430cdf0e10cSrcweir 			<li> osl_Socket_OptionError
431cdf0e10cSrcweir 			<li> osl_Socket_OptionType
432cdf0e10cSrcweir 			<li> osl_Socket_OptionTcpNoDelay
433cdf0e10cSrcweir 			</ul>
434cdf0e10cSrcweir 
435cdf0e10cSrcweir 			If not above mentioned otherwise, the options are only valid for
436cdf0e10cSrcweir 			level osl_Socket_LevelSocket.
437cdf0e10cSrcweir 
438cdf0e10cSrcweir 			@param pBuffer Pointer to a Buffer which contains the attribute-value.
439cdf0e10cSrcweir 
440cdf0e10cSrcweir 			@param BufferSize contains the length of the Buffer.
441cdf0e10cSrcweir 
442cdf0e10cSrcweir 			@param Level selects the level for which an option should be changed.
443cdf0e10cSrcweir 			Valid values are:
444cdf0e10cSrcweir 			<ul>
445cdf0e10cSrcweir 			<li> osl_Socket_evel_Socket : Socket Level
446cdf0e10cSrcweir 			<li> osl_Socket_Level_Tcp   : Level of Transmission Control Protocol
447cdf0e10cSrcweir 			</ul>
448cdf0e10cSrcweir 
449cdf0e10cSrcweir 			@return True if the option could be changed.
450cdf0e10cSrcweir 		*/
451cdf0e10cSrcweir 		inline sal_Bool SAL_CALL setOption( oslSocketOption Option,
452cdf0e10cSrcweir 											void* pBuffer,
453cdf0e10cSrcweir 											sal_uInt32 BufferLen,
454cdf0e10cSrcweir 											oslSocketOptionLevel Level= osl_Socket_LevelSocket ) const;
455cdf0e10cSrcweir 
456cdf0e10cSrcweir 		/** Convenience function for setting sal_Bool and sal_Int32 option values.
457cdf0e10cSrcweir 			@see setOption()
458cdf0e10cSrcweir 		 */
459cdf0e10cSrcweir 		inline sal_Bool setOption( oslSocketOption option, sal_Int32 nValue  );
460cdf0e10cSrcweir 
461cdf0e10cSrcweir 		/** Convenience function for retrieving sal_Bool and sal_Int32 option values.
462cdf0e10cSrcweir 			@see setOption()
463cdf0e10cSrcweir 		 */
464cdf0e10cSrcweir 		inline sal_Int32 getOption( oslSocketOption option ) const;
465cdf0e10cSrcweir 
466cdf0e10cSrcweir 		/** Enables/disables non-blocking mode of the socket.
467cdf0e10cSrcweir 			@param bNonBlockingMode If <code>sal_True</code>, blocking mode will be switched off
468cdf0e10cSrcweir 				   If <code>sal_False</code>, the socket will become a blocking
469cdf0e10cSrcweir 				   socket (which is the default behaviour of a socket).
470cdf0e10cSrcweir 			@return <code>sal_True</code> if mode could be set.
471cdf0e10cSrcweir 		*/
472cdf0e10cSrcweir 		inline sal_Bool SAL_CALL enableNonBlockingMode( sal_Bool bNonBlockingMode);
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 		/** Query blocking mode of the socket.
475cdf0e10cSrcweir 			@return <code>sal_True</code> if non-blocking mode is set.
476cdf0e10cSrcweir 		*/
477cdf0e10cSrcweir 		inline sal_Bool SAL_CALL isNonBlockingMode() const;
478cdf0e10cSrcweir 
479cdf0e10cSrcweir 
480cdf0e10cSrcweir 		/** clears the error status
481cdf0e10cSrcweir 		*/
482cdf0e10cSrcweir 		inline void	SAL_CALL clearError() const;
483cdf0e10cSrcweir 
484*86e1cf34SPedro Giffuni         /** returns a constant describing the last error for the socket system.
485cdf0e10cSrcweir 
486*86e1cf34SPedro Giffuni 			@return osl_Socket_E_NONE if no error occurred, invalid_SocketError if
487*86e1cf34SPedro Giffuni 			an unknown (unmapped) error occurred, otherwise an enum describing the
488cdf0e10cSrcweir 			error.
489cdf0e10cSrcweir 			@see osl_getLastSocketError()
490cdf0e10cSrcweir 		*/
491cdf0e10cSrcweir 		inline oslSocketError getError() const;
492cdf0e10cSrcweir 
493cdf0e10cSrcweir 		/** Builds a string with the last error-message for the socket.
494cdf0e10cSrcweir 		 */
495cdf0e10cSrcweir 		inline ::rtl::OUString getErrorAsString( ) const;
496cdf0e10cSrcweir 
497cdf0e10cSrcweir 		/** Returns the underlying handle unacquired  (The caller must acquire it to keep it).
498cdf0e10cSrcweir 		 */
499cdf0e10cSrcweir 		inline oslSocket getHandle() const;
500cdf0e10cSrcweir 	};
501cdf0e10cSrcweir 
502cdf0e10cSrcweir 
503cdf0e10cSrcweir 	class StreamSocket : public Socket
504cdf0e10cSrcweir 	{
505cdf0e10cSrcweir 	public:
506cdf0e10cSrcweir 		/** Creates a socket.
507cdf0e10cSrcweir 			@param Type For some protocols it might be desirable to
508cdf0e10cSrcweir 			use a different type than <code>osl_Socket_TypeStream</code>
509cdf0e10cSrcweir 			(like <code>osl_Socket_TypeSeqPacket</code>).
510cdf0e10cSrcweir 			Therefore this parameter is not hidden.
511cdf0e10cSrcweir 		*/
512cdf0e10cSrcweir   		inline StreamSocket(oslAddrFamily Family = osl_Socket_FamilyInet,
513cdf0e10cSrcweir 							oslProtocol	Protocol = osl_Socket_ProtocolIp,
514cdf0e10cSrcweir 							oslSocketType	Type = osl_Socket_TypeStream);
515cdf0e10cSrcweir 
516cdf0e10cSrcweir 		inline StreamSocket( const StreamSocket & );
517cdf0e10cSrcweir 
518cdf0e10cSrcweir 		inline StreamSocket( oslSocket Socket , __sal_NoAcquire noacquire );
519cdf0e10cSrcweir 
520cdf0e10cSrcweir 		inline StreamSocket( oslSocket Socket );
521cdf0e10cSrcweir 
522cdf0e10cSrcweir 		/** Retrieves n bytes from the stream and copies them into pBuffer.
523cdf0e10cSrcweir 			The method avoids incomplete reads due to packet boundaries and is thus
524cdf0e10cSrcweir 			blocking.
525cdf0e10cSrcweir 			@param pBuffer receives the read data. pBuffer must be large enough
526cdf0e10cSrcweir 			to hold n bytes.
527cdf0e10cSrcweir 			@param n the number of bytes to read.
528cdf0e10cSrcweir 			@return	the number of read bytes. The number will only be smaller than
529cdf0e10cSrcweir 			n if an exceptional condition (e.g. connection closed) occurs.
530cdf0e10cSrcweir 		*/
531cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL read(void* pBuffer, sal_uInt32 n);
532cdf0e10cSrcweir 
533cdf0e10cSrcweir 		/** Writes n bytes from pBuffer to the stream. The method avoids
534cdf0e10cSrcweir 			incomplete writes due to packet boundaries and is thus blocking.
535cdf0e10cSrcweir 			@param pBuffer contains the data to be written.
536cdf0e10cSrcweir 			@param n the number of bytes to write.
537cdf0e10cSrcweir 			@return the number of written bytes. The number will only be smaller than
538cdf0e10cSrcweir 			n if an exceptional condition (e.g. connection closed) occurs.
539cdf0e10cSrcweir 		*/
540cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL write(const void* pBuffer, sal_uInt32 n);
541cdf0e10cSrcweir 
542cdf0e10cSrcweir 
543cdf0e10cSrcweir 		/** Tries to receive BytesToRead data from the connected socket,
544cdf0e10cSrcweir 
545cdf0e10cSrcweir 			@param pBuffer [out] Points to a buffer that will be filled with the received
546cdf0e10cSrcweir 			data. pBuffer must have at least have a size of BytesToRead.
547cdf0e10cSrcweir 			@param BytesToRead [in] The number of bytes to read.
548cdf0e10cSrcweir 			@param Flag [in] Modifier for the call. Valid values are:
549cdf0e10cSrcweir 
550cdf0e10cSrcweir 			<ul>
551cdf0e10cSrcweir 			<li><code>osl_Socket_MsgNormal</code>
552cdf0e10cSrcweir 			<li><code>osl_Socket_MsgOOB</code>
553cdf0e10cSrcweir 			<li><code>osl_Socket_MsgPeek</code>
554cdf0e10cSrcweir 			<li><code>osl_Socket_MsgDontRoute</code>
555cdf0e10cSrcweir 			<li><code>osl_Socket_MsgMaxIOVLen</code>
556cdf0e10cSrcweir 			</ul>
557cdf0e10cSrcweir 			@return the number of received bytes, which may be less than BytesToRead.
558cdf0e10cSrcweir 		*/
559cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL recv(void* pBuffer,
560cdf0e10cSrcweir 									   sal_uInt32 BytesToRead,
561cdf0e10cSrcweir 									   oslSocketMsgFlag flags= osl_Socket_MsgNormal);
562cdf0e10cSrcweir 
563cdf0e10cSrcweir 		/** Tries to send BytesToSend data to the connected socket.
564cdf0e10cSrcweir 
565cdf0e10cSrcweir 			@param pBuffer [in] Points to a buffer that contains the send-data.
566cdf0e10cSrcweir 			@param BytesToSend [in] The number of bytes to send. pBuffer must have at least
567cdf0e10cSrcweir 			this size.
568cdf0e10cSrcweir 			@param Flag [in] Modifier for the call. Valid values are:
569cdf0e10cSrcweir 			<ul>
570cdf0e10cSrcweir 			<li><code>osl_Socket_MsgNormal</code>
571cdf0e10cSrcweir 			<li><code>osl_Socket_MsgOOB</code>
572cdf0e10cSrcweir 			<li><code>osl_Socket_MsgPeek</code>
573cdf0e10cSrcweir 			<li><code>osl_Socket_MsgDontRoute</code>
574cdf0e10cSrcweir 			<li><code>osl_Socket_MsgMaxIOVLen</code>
575cdf0e10cSrcweir 			</ul>
576cdf0e10cSrcweir 
577*86e1cf34SPedro Giffuni 			@return the number of transferred bytes. It may be less than BytesToSend.
578cdf0e10cSrcweir 		*/
579cdf0e10cSrcweir 		sal_Int32 SAL_CALL send(const void* pBuffer,
580cdf0e10cSrcweir 								sal_uInt32 BytesToSend,
581cdf0e10cSrcweir 								oslSocketMsgFlag= osl_Socket_MsgNormal);
582cdf0e10cSrcweir 	};
583cdf0e10cSrcweir 
584cdf0e10cSrcweir 	class ConnectorSocket : public StreamSocket
585cdf0e10cSrcweir 	{
586cdf0e10cSrcweir 	public:
587cdf0e10cSrcweir 		/** Creates a socket that can connect to a (remote) host.
588cdf0e10cSrcweir 			@param Type For some protocols it might be desirable to
589cdf0e10cSrcweir 			use a different type than sock_stream <code>osl_Socket_TypeSeqPacket</code>
590cdf0e10cSrcweir 			(like <code>osl_Socket_TypeSeqPacket</code>).
591cdf0e10cSrcweir 			Therefore we do not hide this parameter here.
592cdf0e10cSrcweir 		*/
593cdf0e10cSrcweir   		ConnectorSocket(oslAddrFamily Family = osl_Socket_FamilyInet,
594cdf0e10cSrcweir 						oslProtocol	Protocol = osl_Socket_ProtocolIp,
595cdf0e10cSrcweir 						oslSocketType	Type = osl_Socket_TypeStream);
596cdf0e10cSrcweir 
597cdf0e10cSrcweir 
598cdf0e10cSrcweir 		/** Connects the socket to a (remote) host.
599cdf0e10cSrcweir 			@param TargetHost The address of the target.
600cdf0e10cSrcweir 			@param pTimeOut The timeout for blocking. If 0, a default system dependent timeout
601cdf0e10cSrcweir 			                us used.
602cdf0e10cSrcweir 			@return <code> osl_Socket_Ok</code> if connected successfully,
603cdf0e10cSrcweir 			<code>osl_Socket_TimedOut</code> on timeout,
604cdf0e10cSrcweir 			<code>osl_Socket_Interrupted</code> if unblocked forcefully (by osl::Socket::close()),
605cdf0e10cSrcweir 			<code>osl_Socket_Error</code> if connect failed.
606cdf0e10cSrcweir 		*/
607cdf0e10cSrcweir 		oslSocketResult SAL_CALL connect(const SocketAddr& TargetHost, const TimeValue* pTimeout = 0);
608cdf0e10cSrcweir 	};
609cdf0e10cSrcweir 
610cdf0e10cSrcweir 	/** Allows to accept socket connections.
611cdf0e10cSrcweir 	 */
612cdf0e10cSrcweir 	class AcceptorSocket : public Socket
613cdf0e10cSrcweir 	{
614cdf0e10cSrcweir 	public:
615cdf0e10cSrcweir 		inline AcceptorSocket(oslAddrFamily Family = osl_Socket_FamilyInet,
616cdf0e10cSrcweir 							  oslProtocol	Protocol = osl_Socket_ProtocolIp,
617cdf0e10cSrcweir 							  oslSocketType	Type = osl_Socket_TypeStream);
618cdf0e10cSrcweir 
619cdf0e10cSrcweir 		/** Prepare a socket for the accept-call. The socket must have been
620cdf0e10cSrcweir 			bound before to the local address.
621cdf0e10cSrcweir 			@param MaxPendingConnections The maximum number of pending
622cdf0e10cSrcweir 			connections (waiting to be accepted) on this socket. If you use
623cdf0e10cSrcweir 			-1, a system default value is used.
624cdf0e10cSrcweir 			@return <code>sal_True</code> if call was successful.
625cdf0e10cSrcweir 		*/
626cdf0e10cSrcweir 		inline sal_Bool SAL_CALL listen(sal_Int32 MaxPendingConnections= -1);
627cdf0e10cSrcweir 
628cdf0e10cSrcweir 		/** Accepts incoming connections on the socket. You must
629cdf0e10cSrcweir 			precede this call with osl::Socket::bind() and listen().
630cdf0e10cSrcweir 			@param Connection receives the incoming connection.
631cdf0e10cSrcweir 			@return <code>osl_Socket_Ok</code>, if a connection has been accepted,
632cdf0e10cSrcweir 			<code>osl_Socket_TimedOut</code>, if m_RecvTimeout milliseconds passed without connect,
633cdf0e10cSrcweir 			<code>osl_Socket_Error</code> on errors.
634cdf0e10cSrcweir 		*/
635cdf0e10cSrcweir 		inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection);
636cdf0e10cSrcweir 
637cdf0e10cSrcweir 		/** Accepts incoming connections on the socket. You must
638cdf0e10cSrcweir 			precede this call with osl::Socket::bind() and listen().
639cdf0e10cSrcweir 			@param PeerAddr receives the address of the connecting entity
640cdf0e10cSrcweir 			(your communication	partner).
641cdf0e10cSrcweir 			@param Connection receives the incoming connection.
642cdf0e10cSrcweir 			@return <code>osl_Socket_Ok</code>, if a connection has been accepted,
643cdf0e10cSrcweir 			<code>osl_Socket_TimedOut</code>, if m_RecvTimeout milliseconds passed without connect,
644cdf0e10cSrcweir 			<code>osl_Socket_Error</code> on errors.
645cdf0e10cSrcweir 		*/
646cdf0e10cSrcweir 		inline oslSocketResult SAL_CALL acceptConnection( StreamSocket&	Connection, SocketAddr & PeerAddr);
647cdf0e10cSrcweir 	};
648cdf0e10cSrcweir 
649cdf0e10cSrcweir 
650cdf0e10cSrcweir 
651cdf0e10cSrcweir     /** A connectionless socket to send and receive datagrams.
652cdf0e10cSrcweir 	 */
653cdf0e10cSrcweir 	class DatagramSocket : public Socket
654cdf0e10cSrcweir 	{
655cdf0e10cSrcweir 	public:
656cdf0e10cSrcweir 
657cdf0e10cSrcweir 		/** Creates a datagram socket.
658cdf0e10cSrcweir 			@param Type is sock_dgram by default.
659cdf0e10cSrcweir 		*/
660cdf0e10cSrcweir 		inline DatagramSocket(oslAddrFamily Family= osl_Socket_FamilyInet,
661cdf0e10cSrcweir 							  oslProtocol	Protocol= osl_Socket_ProtocolIp,
662cdf0e10cSrcweir 							  oslSocketType	Type= osl_Socket_TypeDgram);
663cdf0e10cSrcweir 
664cdf0e10cSrcweir 		/** Tries to receives BufferSize data from the socket, if no error occurs.
665cdf0e10cSrcweir 
666cdf0e10cSrcweir 			@param pSenderAddr [out] You must provide pointer to a SocketAddr.
667cdf0e10cSrcweir 			It will be	filled with the address of the datagrams sender.
668cdf0e10cSrcweir 			If pSenderAddr is 0, it is ignored.
669cdf0e10cSrcweir 			@param pBuffer [out] Points to a buffer that will be filled with the received
670cdf0e10cSrcweir 			datagram.
671cdf0e10cSrcweir 			@param BufferSize [in] The size of pBuffer.
672cdf0e10cSrcweir 			@param Flag [in] Modifier for the call. Valid values are:
673cdf0e10cSrcweir 			<ul>
674cdf0e10cSrcweir 			<li><code>osl_Socket_MsgNormal</code>
675cdf0e10cSrcweir 			<li><code>osl_Socket_MsgOOB</code>
676cdf0e10cSrcweir 			<li><code>osl_Socket_MsgPeek</code>
677cdf0e10cSrcweir 			<li><code>osl_Socket_MsgDontRoute</code>
678cdf0e10cSrcweir 			<li><code>osl_Socket_MsgMaxIOVLen</code>
679cdf0e10cSrcweir 			</ul>
680cdf0e10cSrcweir 
681cdf0e10cSrcweir 			@return the number of received bytes.
682cdf0e10cSrcweir 		*/
683cdf0e10cSrcweir 		inline sal_Int32 SAL_CALL recvFrom(void*  pBuffer,
684cdf0e10cSrcweir 										   sal_uInt32 BufferSize,
685cdf0e10cSrcweir 										   SocketAddr* pSenderAddr= 0,
686cdf0e10cSrcweir 										   oslSocketMsgFlag Flag= osl_Socket_MsgNormal);
687cdf0e10cSrcweir 
688cdf0e10cSrcweir 		/** Tries to send one datagram with BytesToSend size to the given ReceiverAddr.
689cdf0e10cSrcweir 			Since there is only send one packet, the function doesn't care about
690cdf0e10cSrcweir 			packet boundaries.
691cdf0e10cSrcweir 
692cdf0e10cSrcweir 			@param ReceiverAddr [in] A SocketAddr that contains
693cdf0e10cSrcweir 			the destination address for this send.
694cdf0e10cSrcweir 
695cdf0e10cSrcweir 			@param pBuffer [in] Points to a buffer that contains the send-data.
696cdf0e10cSrcweir 			@param BufferSize [in] The number of bytes to send. pBuffer must have at least
697cdf0e10cSrcweir 			this size.
698cdf0e10cSrcweir 			@param Flag [in] Modifier for the call. Valid values are:
699cdf0e10cSrcweir 
700cdf0e10cSrcweir 			<ul>
701cdf0e10cSrcweir 			<li><code>osl_Socket_MsgNormal</code>
702cdf0e10cSrcweir 			<li><code>osl_Socket_MsgOOB</code>
703cdf0e10cSrcweir 			<li><code>osl_Socket_MsgPeek</code>
704cdf0e10cSrcweir 			<li><code>osl_Socket_MsgDontRoute</code>
705cdf0e10cSrcweir 			<li><code>osl_Socket_MsgMaxIOVLen</code>
706cdf0e10cSrcweir 			</ul>
707cdf0e10cSrcweir 
708*86e1cf34SPedro Giffuni 			@return the number of transferred bytes.
709cdf0e10cSrcweir 		*/
710cdf0e10cSrcweir 		inline sal_Int32	SAL_CALL sendTo( const SocketAddr& ReceiverAddr,
711cdf0e10cSrcweir 											 const void* pBuffer,
712cdf0e10cSrcweir 											 sal_uInt32 BufferSize,
713cdf0e10cSrcweir 											 oslSocketMsgFlag Flag= osl_Socket_MsgNormal);
714cdf0e10cSrcweir 	};
715cdf0e10cSrcweir 
716cdf0e10cSrcweir }
717cdf0e10cSrcweir 
718cdf0e10cSrcweir #endif
719