xref: /AOO41X/main/sal/inc/osl/socket.hxx (revision 565d668c30d8a6cacc881c774c5068be5401257d)
1*565d668cSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*565d668cSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*565d668cSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*565d668cSAndrew Rist  * distributed with this work for additional information
6*565d668cSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*565d668cSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*565d668cSAndrew Rist  * "License"); you may not use this file except in compliance
9*565d668cSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*565d668cSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*565d668cSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*565d668cSAndrew Rist  * software distributed under the License is distributed on an
15*565d668cSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*565d668cSAndrew Rist  * KIND, either express or implied.  See the License for the
17*565d668cSAndrew Rist  * specific language governing permissions and limitations
18*565d668cSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*565d668cSAndrew Rist  *************************************************************/
21*565d668cSAndrew Rist 
22*565d668cSAndrew Rist 
23cdf0e10cSrcweir #ifndef _OSL_SOCKET_HXX_
24cdf0e10cSrcweir #define _OSL_SOCKET_HXX_
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <osl/socket_decl.hxx>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir namespace osl
29cdf0e10cSrcweir {
30cdf0e10cSrcweir     //______________________________________________________________________________
SocketAddr()31cdf0e10cSrcweir 	inline SocketAddr::SocketAddr()
32cdf0e10cSrcweir 		: m_handle( osl_createEmptySocketAddr( osl_Socket_FamilyInet ) )
33cdf0e10cSrcweir 	{}
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 	//______________________________________________________________________________
SocketAddr(const SocketAddr & Addr)36cdf0e10cSrcweir 	inline SocketAddr::SocketAddr(const SocketAddr& Addr)
37cdf0e10cSrcweir 		: m_handle( osl_copySocketAddr( Addr.m_handle ) )
38cdf0e10cSrcweir 	{
39cdf0e10cSrcweir 	}
40cdf0e10cSrcweir 
41cdf0e10cSrcweir 	//______________________________________________________________________________
SocketAddr(oslSocketAddr Addr)42cdf0e10cSrcweir 	inline SocketAddr::SocketAddr(oslSocketAddr Addr)
43cdf0e10cSrcweir 		: m_handle( osl_copySocketAddr( Addr ) )
44cdf0e10cSrcweir 	{
45cdf0e10cSrcweir 	}
46cdf0e10cSrcweir 
47cdf0e10cSrcweir 	//______________________________________________________________________________
SocketAddr(oslSocketAddr Addr,__osl_socket_NoCopy)48cdf0e10cSrcweir 	inline SocketAddr::SocketAddr(oslSocketAddr Addr, __osl_socket_NoCopy )
49cdf0e10cSrcweir 		: m_handle( Addr )
50cdf0e10cSrcweir 	{
51cdf0e10cSrcweir 	}
52cdf0e10cSrcweir 
53cdf0e10cSrcweir 	//______________________________________________________________________________
SocketAddr(const::rtl::OUString & strAddrOrHostName,sal_Int32 nPort)54cdf0e10cSrcweir 	inline SocketAddr::SocketAddr( const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort)
55cdf0e10cSrcweir 		: m_handle( osl_createInetSocketAddr( strAddrOrHostName.pData, nPort ) )
56cdf0e10cSrcweir 	{
57cdf0e10cSrcweir 		if(! m_handle )
58cdf0e10cSrcweir 		{
59cdf0e10cSrcweir 			m_handle = osl_resolveHostname(strAddrOrHostName.pData);
60cdf0e10cSrcweir 
61cdf0e10cSrcweir 			// host found?
62cdf0e10cSrcweir 			if(m_handle)
63cdf0e10cSrcweir 			{
64cdf0e10cSrcweir 				osl_setInetPortOfSocketAddr(m_handle, nPort);
65cdf0e10cSrcweir 			}
66cdf0e10cSrcweir 			else
67cdf0e10cSrcweir 			{
68cdf0e10cSrcweir 				osl_destroySocketAddr( m_handle );
69cdf0e10cSrcweir 				m_handle = 0;
70cdf0e10cSrcweir 			}
71cdf0e10cSrcweir 		}
72cdf0e10cSrcweir 	}
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 	//______________________________________________________________________________
~SocketAddr()75cdf0e10cSrcweir 	inline SocketAddr::~SocketAddr()
76cdf0e10cSrcweir 	{
77cdf0e10cSrcweir 		if( m_handle )
78cdf0e10cSrcweir 			osl_destroySocketAddr( m_handle );
79cdf0e10cSrcweir 	}
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 	//______________________________________________________________________________
getHostname(oslSocketResult * pResult) const82cdf0e10cSrcweir 	inline ::rtl::OUString SocketAddr::getHostname( oslSocketResult *pResult ) const
83cdf0e10cSrcweir 	{
84cdf0e10cSrcweir 		::rtl::OUString hostname;
85cdf0e10cSrcweir 		oslSocketResult result = osl_getHostnameOfSocketAddr( m_handle, &(hostname.pData) );
86cdf0e10cSrcweir 		if( pResult )
87cdf0e10cSrcweir 			*pResult = result;
88cdf0e10cSrcweir 		return hostname;
89cdf0e10cSrcweir 	}
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 	//______________________________________________________________________________
getPort() const92cdf0e10cSrcweir 	inline sal_Int32 SAL_CALL SocketAddr::getPort() const
93cdf0e10cSrcweir 	{
94cdf0e10cSrcweir 		return osl_getInetPortOfSocketAddr(m_handle);
95cdf0e10cSrcweir 	}
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 	//______________________________________________________________________________
setPort(sal_Int32 nPort)98cdf0e10cSrcweir 	inline sal_Bool SAL_CALL SocketAddr::setPort( sal_Int32 nPort )
99cdf0e10cSrcweir 	{
100cdf0e10cSrcweir 		return osl_setInetPortOfSocketAddr(m_handle, nPort );
101cdf0e10cSrcweir 	}
102cdf0e10cSrcweir 
setHostname(const::rtl::OUString & sDottedIpOrHostname)103cdf0e10cSrcweir 	inline sal_Bool SAL_CALL SocketAddr::setHostname( const ::rtl::OUString &sDottedIpOrHostname )
104cdf0e10cSrcweir 	{
105cdf0e10cSrcweir 		*this = SocketAddr( sDottedIpOrHostname , getPort() );
106cdf0e10cSrcweir 		return is();
107cdf0e10cSrcweir 	}
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 	//______________________________________________________________________________
setAddr(const::rtl::ByteSequence & address)110cdf0e10cSrcweir 	inline sal_Bool SAL_CALL SocketAddr::setAddr( const ::rtl::ByteSequence & address )
111cdf0e10cSrcweir 	{
112cdf0e10cSrcweir 		return osl_setAddrOfSocketAddr( m_handle, address.getHandle() )
113cdf0e10cSrcweir             == osl_Socket_Ok;
114cdf0e10cSrcweir 	}
115cdf0e10cSrcweir 
getAddr(oslSocketResult * pResult) const116cdf0e10cSrcweir 	inline ::rtl::ByteSequence SAL_CALL SocketAddr::getAddr( oslSocketResult *pResult ) const
117cdf0e10cSrcweir 	{
118cdf0e10cSrcweir 		::rtl::ByteSequence sequence;
119cdf0e10cSrcweir 		oslSocketResult result = osl_getAddrOfSocketAddr( m_handle,(sal_Sequence **) &sequence );
120cdf0e10cSrcweir 		if( pResult )
121cdf0e10cSrcweir 			*pResult = result;
122cdf0e10cSrcweir 		return sequence;
123cdf0e10cSrcweir 	}
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 	//______________________________________________________________________________
operator =(oslSocketAddr Addr)126cdf0e10cSrcweir 	inline SocketAddr & SAL_CALL SocketAddr::operator= (oslSocketAddr Addr)
127cdf0e10cSrcweir 	{
128cdf0e10cSrcweir 		oslSocketAddr pNewAddr = osl_copySocketAddr( Addr );
129cdf0e10cSrcweir 		if( m_handle )
130cdf0e10cSrcweir 			osl_destroySocketAddr( m_handle );
131cdf0e10cSrcweir 		m_handle = pNewAddr;
132cdf0e10cSrcweir 		return *this;
133cdf0e10cSrcweir 	}
134cdf0e10cSrcweir 
135cdf0e10cSrcweir 	//______________________________________________________________________________
operator =(const SocketAddr & Addr)136cdf0e10cSrcweir 	inline SocketAddr & SAL_CALL SocketAddr::operator= (const SocketAddr& Addr)
137cdf0e10cSrcweir 	{
138cdf0e10cSrcweir 		*this = (Addr.getHandle());
139cdf0e10cSrcweir 		return *this;
140cdf0e10cSrcweir 	}
141cdf0e10cSrcweir 
assign(oslSocketAddr Addr,__osl_socket_NoCopy)142cdf0e10cSrcweir 	inline SocketAddr & SAL_CALL SocketAddr::assign( oslSocketAddr Addr, __osl_socket_NoCopy )
143cdf0e10cSrcweir 	{
144cdf0e10cSrcweir 		if( m_handle )
145cdf0e10cSrcweir 			osl_destroySocketAddr( m_handle );
146cdf0e10cSrcweir 		m_handle = Addr;
147cdf0e10cSrcweir 		return *this;
148cdf0e10cSrcweir 	}
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 	//______________________________________________________________________________
operator ==(oslSocketAddr Addr) const151cdf0e10cSrcweir 	inline sal_Bool SAL_CALL SocketAddr::operator== (oslSocketAddr Addr) const
152cdf0e10cSrcweir 	{
153cdf0e10cSrcweir 		return osl_isEqualSocketAddr( m_handle, Addr );
154cdf0e10cSrcweir 	}
155cdf0e10cSrcweir 
getHandle() const156cdf0e10cSrcweir 	inline oslSocketAddr SocketAddr::getHandle() const
157cdf0e10cSrcweir 	{
158cdf0e10cSrcweir 		return m_handle;
159cdf0e10cSrcweir 	}
160cdf0e10cSrcweir 
161cdf0e10cSrcweir 	//______________________________________________________________________________
is() const162cdf0e10cSrcweir 	inline sal_Bool SocketAddr::is() const
163cdf0e10cSrcweir 	{
164cdf0e10cSrcweir 		return m_handle != 0;
165cdf0e10cSrcweir 	}
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	// (static method)______________________________________________________________
getLocalHostname(oslSocketResult * pResult)168cdf0e10cSrcweir 	inline ::rtl::OUString SAL_CALL SocketAddr::getLocalHostname( oslSocketResult *pResult )
169cdf0e10cSrcweir 	{
170cdf0e10cSrcweir 		::rtl::OUString hostname;
171cdf0e10cSrcweir 		oslSocketResult result = osl_getLocalHostname( &(hostname.pData) );
172cdf0e10cSrcweir 		if(pResult )
173cdf0e10cSrcweir 			*pResult = result;
174cdf0e10cSrcweir 		return hostname;
175cdf0e10cSrcweir 	}
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	// (static method)______________________________________________________________
resolveHostname(const::rtl::OUString & strHostName,SocketAddr & Addr)178cdf0e10cSrcweir 	inline void SAL_CALL SocketAddr::resolveHostname(
179cdf0e10cSrcweir 		const ::rtl::OUString & strHostName, SocketAddr &Addr)
180cdf0e10cSrcweir 	{
181cdf0e10cSrcweir 		Addr = SocketAddr( osl_resolveHostname( strHostName.pData ) , SAL_NO_COPY );
182cdf0e10cSrcweir 	}
183cdf0e10cSrcweir 
184cdf0e10cSrcweir 	// (static method)______________________________________________________________
getServicePort(const::rtl::OUString & strServiceName,const::rtl::OUString & strProtocolName)185cdf0e10cSrcweir 	inline sal_Int32 SAL_CALL SocketAddr::getServicePort(
186cdf0e10cSrcweir 			const ::rtl::OUString& strServiceName,
187cdf0e10cSrcweir 			const ::rtl::OUString & strProtocolName )
188cdf0e10cSrcweir 	{
189cdf0e10cSrcweir 		return osl_getServicePort( strServiceName.pData, strProtocolName.pData );
190cdf0e10cSrcweir 	}
191cdf0e10cSrcweir 
192cdf0e10cSrcweir 	//______________________________________________________________________________
Socket(oslSocketType Type,oslAddrFamily Family,oslProtocol Protocol)193cdf0e10cSrcweir 	inline Socket::Socket(oslSocketType Type,
194cdf0e10cSrcweir 						  oslAddrFamily Family,
195cdf0e10cSrcweir 						  oslProtocol   Protocol)
196cdf0e10cSrcweir 		: m_handle( osl_createSocket(Family, Type, Protocol) )
197cdf0e10cSrcweir 	{}
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 	//______________________________________________________________________________
Socket(oslSocket socketHandle,__sal_NoAcquire)200cdf0e10cSrcweir 	inline Socket::Socket( oslSocket socketHandle, __sal_NoAcquire )
201cdf0e10cSrcweir 		: m_handle( socketHandle )
202cdf0e10cSrcweir 	{}
203cdf0e10cSrcweir 
204cdf0e10cSrcweir 	//______________________________________________________________________________
Socket(oslSocket socketHandle)205cdf0e10cSrcweir 	inline Socket::Socket( oslSocket socketHandle )
206cdf0e10cSrcweir 		: m_handle( socketHandle )
207cdf0e10cSrcweir 	{
208cdf0e10cSrcweir 		osl_acquireSocket( m_handle );
209cdf0e10cSrcweir 	}
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 	//______________________________________________________________________________
Socket(const Socket & socket)212cdf0e10cSrcweir 	inline Socket::Socket( const Socket & socket )
213cdf0e10cSrcweir 		: m_handle( socket.getHandle() )
214cdf0e10cSrcweir 	{
215cdf0e10cSrcweir 		osl_acquireSocket( m_handle );
216cdf0e10cSrcweir 	}
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 	//______________________________________________________________________________
~Socket()219cdf0e10cSrcweir 	inline Socket::~Socket()
220cdf0e10cSrcweir 	{
221cdf0e10cSrcweir 		osl_releaseSocket( m_handle );
222cdf0e10cSrcweir 	}
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 	//______________________________________________________________________________
operator =(oslSocket socketHandle)225cdf0e10cSrcweir 	inline Socket& Socket::operator= ( oslSocket socketHandle)
226cdf0e10cSrcweir 	{
227cdf0e10cSrcweir 		osl_acquireSocket( socketHandle );
228cdf0e10cSrcweir 		osl_releaseSocket( m_handle );
229cdf0e10cSrcweir 		m_handle = socketHandle;
230cdf0e10cSrcweir 		return *this;
231cdf0e10cSrcweir 	}
232cdf0e10cSrcweir 
233cdf0e10cSrcweir 	//______________________________________________________________________________
operator =(const Socket & sock)234cdf0e10cSrcweir 	inline Socket&  Socket::operator= (const Socket& sock)
235cdf0e10cSrcweir 	{
236cdf0e10cSrcweir 		return (*this) = sock.getHandle();
237cdf0e10cSrcweir 	}
238cdf0e10cSrcweir 
239cdf0e10cSrcweir 	//______________________________________________________________________________
operator ==(const Socket & rSocket) const240cdf0e10cSrcweir 	inline sal_Bool Socket::operator==( const Socket& rSocket ) const
241cdf0e10cSrcweir 	{
242cdf0e10cSrcweir 		return m_handle == rSocket.getHandle();
243cdf0e10cSrcweir 	}
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 	//______________________________________________________________________________
operator ==(const oslSocket socketHandle) const246cdf0e10cSrcweir 	inline sal_Bool Socket::operator==( const oslSocket socketHandle ) const
247cdf0e10cSrcweir 	{
248cdf0e10cSrcweir 		return m_handle == socketHandle;
249cdf0e10cSrcweir 	}
250cdf0e10cSrcweir 
251cdf0e10cSrcweir 	//______________________________________________________________________________
shutdown(oslSocketDirection Direction)252cdf0e10cSrcweir 	inline void Socket::shutdown( oslSocketDirection Direction )
253cdf0e10cSrcweir 	{
254cdf0e10cSrcweir 		osl_shutdownSocket( m_handle , Direction );
255cdf0e10cSrcweir 	}
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 	//______________________________________________________________________________
close()258cdf0e10cSrcweir 	inline void Socket::close()
259cdf0e10cSrcweir 	{
260cdf0e10cSrcweir 		osl_closeSocket( m_handle );
261cdf0e10cSrcweir 	}
262cdf0e10cSrcweir 
263cdf0e10cSrcweir 	//______________________________________________________________________________
getLocalAddr(SocketAddr & addr) const264cdf0e10cSrcweir 	inline void Socket::getLocalAddr( SocketAddr & addr) const
265cdf0e10cSrcweir 	{
266cdf0e10cSrcweir 		addr.assign( osl_getLocalAddrOfSocket( m_handle ) , SAL_NO_COPY );
267cdf0e10cSrcweir 	}
268cdf0e10cSrcweir 
269cdf0e10cSrcweir 	//______________________________________________________________________________
getLocalPort() const270cdf0e10cSrcweir 	inline sal_Int32 Socket::getLocalPort() const
271cdf0e10cSrcweir 	{
272cdf0e10cSrcweir 		SocketAddr addr( 0 );
273cdf0e10cSrcweir 		getLocalAddr( addr );
274cdf0e10cSrcweir 		return addr.getPort();
275cdf0e10cSrcweir 	}
276cdf0e10cSrcweir 
277cdf0e10cSrcweir 	//______________________________________________________________________________
getLocalHost() const278cdf0e10cSrcweir 	inline ::rtl::OUString Socket::getLocalHost() const
279cdf0e10cSrcweir 	{
280cdf0e10cSrcweir 		SocketAddr addr( 0 );
281cdf0e10cSrcweir 		getLocalAddr( addr );
282cdf0e10cSrcweir 		return addr.getHostname();
283cdf0e10cSrcweir 	}
284cdf0e10cSrcweir 
285cdf0e10cSrcweir 	//______________________________________________________________________________
getPeerAddr(SocketAddr & addr) const286cdf0e10cSrcweir 	inline void Socket::getPeerAddr( SocketAddr &addr ) const
287cdf0e10cSrcweir 	{
288cdf0e10cSrcweir 		addr.assign( osl_getPeerAddrOfSocket( m_handle ), SAL_NO_COPY );
289cdf0e10cSrcweir 	}
290cdf0e10cSrcweir 
291cdf0e10cSrcweir 	//______________________________________________________________________________
getPeerPort() const292cdf0e10cSrcweir 	inline sal_Int32 Socket::getPeerPort() const
293cdf0e10cSrcweir 	{
294cdf0e10cSrcweir 		SocketAddr addr( 0 );
295cdf0e10cSrcweir 		getPeerAddr( addr );
296cdf0e10cSrcweir 		return addr.getPort();
297cdf0e10cSrcweir 	}
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 	//______________________________________________________________________________
getPeerHost() const300cdf0e10cSrcweir 	inline ::rtl::OUString Socket::getPeerHost() const
301cdf0e10cSrcweir 	{
302cdf0e10cSrcweir 		SocketAddr addr( 0 );
303cdf0e10cSrcweir 		getPeerAddr( addr );
304cdf0e10cSrcweir 		return addr.getHostname();
305cdf0e10cSrcweir 	}
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 	//______________________________________________________________________________
bind(const SocketAddr & LocalInterface)308cdf0e10cSrcweir 	inline sal_Bool Socket::bind(const SocketAddr& LocalInterface)
309cdf0e10cSrcweir 	{
310cdf0e10cSrcweir 		return osl_bindAddrToSocket( m_handle , LocalInterface.getHandle() );
311cdf0e10cSrcweir 	}
312cdf0e10cSrcweir 
313cdf0e10cSrcweir 	//______________________________________________________________________________
isRecvReady(const TimeValue * pTimeout) const314cdf0e10cSrcweir 	inline sal_Bool	Socket::isRecvReady(const TimeValue *pTimeout ) const
315cdf0e10cSrcweir 	{
316cdf0e10cSrcweir 		return osl_isReceiveReady( m_handle , pTimeout );
317cdf0e10cSrcweir 	}
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 	//______________________________________________________________________________
isSendReady(const TimeValue * pTimeout) const320cdf0e10cSrcweir 	inline sal_Bool	Socket::isSendReady(const TimeValue *pTimeout ) const
321cdf0e10cSrcweir 	{
322cdf0e10cSrcweir 		return osl_isSendReady( m_handle, pTimeout );
323cdf0e10cSrcweir 	}
324cdf0e10cSrcweir 
325cdf0e10cSrcweir 	//______________________________________________________________________________
isExceptionPending(const TimeValue * pTimeout) const326cdf0e10cSrcweir 	inline sal_Bool	Socket::isExceptionPending(const TimeValue *pTimeout ) const
327cdf0e10cSrcweir 	{
328cdf0e10cSrcweir 		return osl_isExceptionPending( m_handle, pTimeout );
329cdf0e10cSrcweir 	}
330cdf0e10cSrcweir 
331cdf0e10cSrcweir 	//______________________________________________________________________________
getType() const332cdf0e10cSrcweir 	inline oslSocketType Socket::getType() const
333cdf0e10cSrcweir 	{
334cdf0e10cSrcweir 		return osl_getSocketType( m_handle );
335cdf0e10cSrcweir 	}
336cdf0e10cSrcweir 
337cdf0e10cSrcweir 	//______________________________________________________________________________
getOption(oslSocketOption Option,void * pBuffer,sal_uInt32 BufferLen,oslSocketOptionLevel Level) const338cdf0e10cSrcweir 	inline sal_Int32  Socket::getOption(
339cdf0e10cSrcweir 		oslSocketOption Option,
340cdf0e10cSrcweir 		void* pBuffer,
341cdf0e10cSrcweir 		sal_uInt32 BufferLen,
342cdf0e10cSrcweir 		oslSocketOptionLevel Level) const
343cdf0e10cSrcweir 	{
344cdf0e10cSrcweir 		return osl_getSocketOption( m_handle, Level, Option, pBuffer , BufferLen );
345cdf0e10cSrcweir 	}
346cdf0e10cSrcweir 
347cdf0e10cSrcweir 	//______________________________________________________________________________
setOption(oslSocketOption Option,void * pBuffer,sal_uInt32 BufferLen,oslSocketOptionLevel Level) const348cdf0e10cSrcweir 	inline sal_Bool Socket::setOption(	oslSocketOption Option,
349cdf0e10cSrcweir 										void* pBuffer,
350cdf0e10cSrcweir 										sal_uInt32 BufferLen,
351cdf0e10cSrcweir 										oslSocketOptionLevel Level ) const
352cdf0e10cSrcweir 	{
353cdf0e10cSrcweir 		return osl_setSocketOption( m_handle, Level, Option , pBuffer, BufferLen );
354cdf0e10cSrcweir 	}
355cdf0e10cSrcweir 
356cdf0e10cSrcweir 	//______________________________________________________________________________
setOption(oslSocketOption option,sal_Int32 nValue)357cdf0e10cSrcweir 	inline sal_Bool Socket::setOption( oslSocketOption option, sal_Int32 nValue  )
358cdf0e10cSrcweir 	{
359cdf0e10cSrcweir 		return setOption( option, &nValue, sizeof( nValue ) );
360cdf0e10cSrcweir 	}
361cdf0e10cSrcweir 
362cdf0e10cSrcweir 	//______________________________________________________________________________
getOption(oslSocketOption option) const363cdf0e10cSrcweir 	inline sal_Int32 Socket::getOption( oslSocketOption option ) const
364cdf0e10cSrcweir 	{
365cdf0e10cSrcweir 		sal_Int32 n;
366cdf0e10cSrcweir 		getOption( option, &n, sizeof( n ) );
367cdf0e10cSrcweir 		return n;
368cdf0e10cSrcweir 	}
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 	//______________________________________________________________________________
enableNonBlockingMode(sal_Bool bNonBlockingMode)371cdf0e10cSrcweir 	inline sal_Bool Socket::enableNonBlockingMode( sal_Bool bNonBlockingMode)
372cdf0e10cSrcweir 	{
373cdf0e10cSrcweir 		return osl_enableNonBlockingMode( m_handle , bNonBlockingMode );
374cdf0e10cSrcweir 	}
375cdf0e10cSrcweir 
376cdf0e10cSrcweir 	//______________________________________________________________________________
isNonBlockingMode() const377cdf0e10cSrcweir 	inline sal_Bool Socket::isNonBlockingMode() const
378cdf0e10cSrcweir 	{
379cdf0e10cSrcweir 		return osl_isNonBlockingMode( m_handle );
380cdf0e10cSrcweir 	}
381cdf0e10cSrcweir 
382cdf0e10cSrcweir 	//______________________________________________________________________________
clearError() const383cdf0e10cSrcweir 	inline void	SAL_CALL Socket::clearError() const
384cdf0e10cSrcweir 	{
385cdf0e10cSrcweir 		sal_Int32 err = 0;
386cdf0e10cSrcweir 		getOption(osl_Socket_OptionError, &err, sizeof(err));
387cdf0e10cSrcweir 	}
388cdf0e10cSrcweir 
389cdf0e10cSrcweir 	//______________________________________________________________________________
getError() const390cdf0e10cSrcweir 	inline oslSocketError Socket::getError() const
391cdf0e10cSrcweir 	{
392cdf0e10cSrcweir 		return osl_getLastSocketError( m_handle );
393cdf0e10cSrcweir 	}
394cdf0e10cSrcweir 
395cdf0e10cSrcweir 	//______________________________________________________________________________
getErrorAsString() const396cdf0e10cSrcweir 	inline ::rtl::OUString Socket::getErrorAsString( ) const
397cdf0e10cSrcweir 	{
398cdf0e10cSrcweir 		::rtl::OUString error;
399cdf0e10cSrcweir 		osl_getLastSocketErrorDescription( m_handle, &(error.pData) );
400cdf0e10cSrcweir 		return error;
401cdf0e10cSrcweir 	}
402cdf0e10cSrcweir 
403cdf0e10cSrcweir 	//______________________________________________________________________________
getHandle() const404cdf0e10cSrcweir 	inline oslSocket Socket::getHandle() const
405cdf0e10cSrcweir 	{
406cdf0e10cSrcweir 		return m_handle;
407cdf0e10cSrcweir 	}
408cdf0e10cSrcweir 
409cdf0e10cSrcweir 	//______________________________________________________________________________
StreamSocket(oslAddrFamily Family,oslProtocol Protocol,oslSocketType Type)410cdf0e10cSrcweir 	inline StreamSocket::StreamSocket(oslAddrFamily Family,
411cdf0e10cSrcweir 									  oslProtocol Protocol,
412cdf0e10cSrcweir 									  oslSocketType	Type )
413cdf0e10cSrcweir 		: Socket( Type, Family, Protocol )
414cdf0e10cSrcweir 	{}
415cdf0e10cSrcweir 
416cdf0e10cSrcweir 	//______________________________________________________________________________
StreamSocket(oslSocket socketHandle,__sal_NoAcquire noacquire)417cdf0e10cSrcweir 	inline StreamSocket::StreamSocket( oslSocket socketHandle, __sal_NoAcquire noacquire )
418cdf0e10cSrcweir 		: Socket( socketHandle, noacquire )
419cdf0e10cSrcweir 	{}
420cdf0e10cSrcweir 
421cdf0e10cSrcweir 	//______________________________________________________________________________
StreamSocket(oslSocket socketHandle)422cdf0e10cSrcweir 	inline StreamSocket::StreamSocket( oslSocket socketHandle )
423cdf0e10cSrcweir 		: Socket( socketHandle )
424cdf0e10cSrcweir 	{}
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 	//______________________________________________________________________________
StreamSocket(const StreamSocket & socket)427cdf0e10cSrcweir 	inline StreamSocket::StreamSocket( const StreamSocket & socket )
428cdf0e10cSrcweir 		: Socket( socket )
429cdf0e10cSrcweir 	{}
430cdf0e10cSrcweir 
431cdf0e10cSrcweir     //______________________________________________________________________________
read(void * pBuffer,sal_uInt32 n)432cdf0e10cSrcweir 	inline sal_Int32 StreamSocket::read(void* pBuffer, sal_uInt32 n)
433cdf0e10cSrcweir 	{
434cdf0e10cSrcweir 		return osl_readSocket( m_handle, pBuffer, n );
435cdf0e10cSrcweir 	}
436cdf0e10cSrcweir 
437cdf0e10cSrcweir 	//______________________________________________________________________________
write(const void * pBuffer,sal_uInt32 n)438cdf0e10cSrcweir 	inline sal_Int32 StreamSocket::write(const void* pBuffer, sal_uInt32 n)
439cdf0e10cSrcweir 	{
440cdf0e10cSrcweir 		return osl_writeSocket( m_handle, pBuffer, n );
441cdf0e10cSrcweir 	}
442cdf0e10cSrcweir 
443cdf0e10cSrcweir 
444cdf0e10cSrcweir 	//______________________________________________________________________________
recv(void * pBuffer,sal_uInt32 BytesToRead,oslSocketMsgFlag Flag)445cdf0e10cSrcweir 	inline sal_Int32 StreamSocket::recv(void* pBuffer,
446cdf0e10cSrcweir 										sal_uInt32 BytesToRead,
447cdf0e10cSrcweir 										oslSocketMsgFlag Flag)
448cdf0e10cSrcweir 	{
449cdf0e10cSrcweir 		return osl_receiveSocket( m_handle, pBuffer,BytesToRead, Flag );
450cdf0e10cSrcweir 	}
451cdf0e10cSrcweir 
452cdf0e10cSrcweir 	//______________________________________________________________________________
send(const void * pBuffer,sal_uInt32 BytesToSend,oslSocketMsgFlag Flag)453cdf0e10cSrcweir 	inline sal_Int32 StreamSocket::send(const void* pBuffer,
454cdf0e10cSrcweir 										sal_uInt32 BytesToSend,
455cdf0e10cSrcweir 										oslSocketMsgFlag Flag)
456cdf0e10cSrcweir 	{
457cdf0e10cSrcweir 		return osl_sendSocket( m_handle, pBuffer, BytesToSend, Flag );
458cdf0e10cSrcweir 	}
459cdf0e10cSrcweir 
460cdf0e10cSrcweir 	//______________________________________________________________________________
ConnectorSocket(oslAddrFamily Family,oslProtocol Protocol,oslSocketType Type)461cdf0e10cSrcweir   	inline ConnectorSocket::ConnectorSocket(oslAddrFamily Family,
462cdf0e10cSrcweir 											oslProtocol	Protocol,
463cdf0e10cSrcweir 											oslSocketType	Type)
464cdf0e10cSrcweir 		: StreamSocket( Family, Protocol ,Type )
465cdf0e10cSrcweir 	{}
466cdf0e10cSrcweir 
467cdf0e10cSrcweir 	//______________________________________________________________________________
connect(const SocketAddr & TargetHost,const TimeValue * pTimeout)468cdf0e10cSrcweir 	inline oslSocketResult ConnectorSocket::connect( const SocketAddr& TargetHost,
469cdf0e10cSrcweir 													 const TimeValue* pTimeout )
470cdf0e10cSrcweir 	{
471cdf0e10cSrcweir 		return osl_connectSocketTo( m_handle , TargetHost.getHandle(), pTimeout );
472cdf0e10cSrcweir 	}
473cdf0e10cSrcweir 
474cdf0e10cSrcweir 	//______________________________________________________________________________
AcceptorSocket(oslAddrFamily Family,oslProtocol Protocol,oslSocketType Type)475cdf0e10cSrcweir 	inline AcceptorSocket::AcceptorSocket(oslAddrFamily Family ,
476cdf0e10cSrcweir 										  oslProtocol	Protocol ,
477cdf0e10cSrcweir 										  oslSocketType	Type )
478cdf0e10cSrcweir 		: Socket( Type, Family, Protocol )
479cdf0e10cSrcweir 	{}
480cdf0e10cSrcweir 
481cdf0e10cSrcweir 	//______________________________________________________________________________
listen(sal_Int32 MaxPendingConnections)482cdf0e10cSrcweir 	inline sal_Bool AcceptorSocket::listen(sal_Int32 MaxPendingConnections)
483cdf0e10cSrcweir 	{
484cdf0e10cSrcweir 		return osl_listenOnSocket( m_handle, MaxPendingConnections );
485cdf0e10cSrcweir 	}
486cdf0e10cSrcweir 
487cdf0e10cSrcweir 	//______________________________________________________________________________
acceptConnection(StreamSocket & Connection)488cdf0e10cSrcweir 	inline oslSocketResult AcceptorSocket::acceptConnection( StreamSocket& Connection)
489cdf0e10cSrcweir 	{
490cdf0e10cSrcweir 		oslSocket o = osl_acceptConnectionOnSocket( m_handle, 0 );
491cdf0e10cSrcweir 		oslSocketResult status = osl_Socket_Ok;
492cdf0e10cSrcweir 		if( o )
493cdf0e10cSrcweir 		{
494cdf0e10cSrcweir 			Connection = StreamSocket( o , SAL_NO_ACQUIRE );
495cdf0e10cSrcweir 		}
496cdf0e10cSrcweir 		else
497cdf0e10cSrcweir 		{
498cdf0e10cSrcweir 			Connection = StreamSocket();
499cdf0e10cSrcweir 			status = osl_Socket_Error;
500cdf0e10cSrcweir 		}
501cdf0e10cSrcweir 		return status;
502cdf0e10cSrcweir 	}
503cdf0e10cSrcweir 
504cdf0e10cSrcweir 	//______________________________________________________________________________
acceptConnection(StreamSocket & Connection,SocketAddr & PeerAddr)505cdf0e10cSrcweir 	inline oslSocketResult AcceptorSocket::acceptConnection(
506cdf0e10cSrcweir 		StreamSocket&	Connection, SocketAddr & PeerAddr)
507cdf0e10cSrcweir 	{
508cdf0e10cSrcweir 		// TODO change in/OUT parameter
509cdf0e10cSrcweir 		oslSocket o = osl_acceptConnectionOnSocket( m_handle, (oslSocketAddr *)&PeerAddr );
510cdf0e10cSrcweir 		oslSocketResult status = osl_Socket_Ok;
511cdf0e10cSrcweir 		if( o )
512cdf0e10cSrcweir 		{
513cdf0e10cSrcweir 			Connection = StreamSocket( o , SAL_NO_ACQUIRE );
514cdf0e10cSrcweir 		}
515cdf0e10cSrcweir 		else
516cdf0e10cSrcweir 		{
517cdf0e10cSrcweir 			Connection = StreamSocket();
518cdf0e10cSrcweir 			status = osl_Socket_Error;
519cdf0e10cSrcweir 		}
520cdf0e10cSrcweir 		return status;
521cdf0e10cSrcweir 	}
522cdf0e10cSrcweir 
523cdf0e10cSrcweir 	//______________________________________________________________________________
DatagramSocket(oslAddrFamily Family,oslProtocol Protocol,oslSocketType Type)524cdf0e10cSrcweir 	inline DatagramSocket::DatagramSocket(oslAddrFamily Family,
525cdf0e10cSrcweir 										  oslProtocol	Protocol,
526cdf0e10cSrcweir 										  oslSocketType	Type)
527cdf0e10cSrcweir 		: Socket( Type, Family, Protocol )
528cdf0e10cSrcweir 	{}
529cdf0e10cSrcweir 
530cdf0e10cSrcweir 	//______________________________________________________________________________
recvFrom(void * pBuffer,sal_uInt32 BufferSize,SocketAddr * pSenderAddr,oslSocketMsgFlag Flag)531cdf0e10cSrcweir 	inline sal_Int32 DatagramSocket::recvFrom(void*  pBuffer,
532cdf0e10cSrcweir 											  sal_uInt32 BufferSize,
533cdf0e10cSrcweir 											  SocketAddr* pSenderAddr,
534cdf0e10cSrcweir 											  oslSocketMsgFlag Flag )
535cdf0e10cSrcweir 	{
536cdf0e10cSrcweir 		sal_Int32 nByteRead;
537cdf0e10cSrcweir 		if( pSenderAddr )
538cdf0e10cSrcweir 		{
539cdf0e10cSrcweir 			// TODO : correct the out-parameter pSenderAddr outparameter
540cdf0e10cSrcweir   			nByteRead = osl_receiveFromSocket( m_handle, pSenderAddr->getHandle() , pBuffer,
541cdf0e10cSrcweir   											   BufferSize, Flag);
542cdf0e10cSrcweir //  			nByteRead = osl_receiveFromSocket( m_handle, *(oslSocketAddr**) &pSenderAddr , pBuffer,
543cdf0e10cSrcweir //  											   BufferSize, Flag);
544cdf0e10cSrcweir 		}
545cdf0e10cSrcweir 		else
546cdf0e10cSrcweir 		{
547cdf0e10cSrcweir 			nByteRead = osl_receiveFromSocket( m_handle, 0 , pBuffer , BufferSize ,  Flag );
548cdf0e10cSrcweir 		}
549cdf0e10cSrcweir 		return nByteRead;
550cdf0e10cSrcweir 	}
551cdf0e10cSrcweir 
552cdf0e10cSrcweir 	//______________________________________________________________________________
sendTo(const SocketAddr & ReceiverAddr,const void * pBuffer,sal_uInt32 BufferSize,oslSocketMsgFlag Flag)553cdf0e10cSrcweir 	inline sal_Int32  DatagramSocket::sendTo( const SocketAddr& ReceiverAddr,
554cdf0e10cSrcweir 											  const void* pBuffer,
555cdf0e10cSrcweir 											  sal_uInt32 BufferSize,
556cdf0e10cSrcweir 											  oslSocketMsgFlag Flag )
557cdf0e10cSrcweir 	{
558cdf0e10cSrcweir 		return osl_sendToSocket( m_handle, ReceiverAddr.getHandle(), pBuffer, BufferSize, Flag );
559cdf0e10cSrcweir 	}
560cdf0e10cSrcweir }
561cdf0e10cSrcweir #endif
562