LibreOffice
LibreOffice 6.2 SDK C/C++ API Reference
socket_decl.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #ifndef INCLUDED_OSL_SOCKET_DECL_HXX
21 #define INCLUDED_OSL_SOCKET_DECL_HXX
22 
23 #include "sal/config.h"
24 
25 #include <cstddef>
26 
27 #include "osl/socket.h"
28 #include "rtl/ustring.hxx"
29 #include "rtl/byteseq.hxx"
30 
31 namespace osl
32 {
34 
39  class SocketAddr
40  {
41  protected:
43  public:
44 
47  inline SocketAddr();
48 
51  inline SocketAddr(const SocketAddr& Addr);
52 
53 #if defined LIBO_INTERNAL_ONLY
54  inline SocketAddr(SocketAddr && other);
55 #endif
56 
63  inline SocketAddr(const oslSocketAddr Addr, __osl_socket_NoCopy nocopy );
64 
69  inline SocketAddr(oslSocketAddr Addr);
70 
77  inline SocketAddr(const ::rtl::OUString& strAddrOrHostName, sal_Int32 nPort);
78 
81  inline ~SocketAddr();
82 
88  inline bool is() const;
89 
100  inline ::rtl::OUString SAL_CALL getHostname(oslSocketResult *pResult = NULL) const;
101 
109  inline bool SAL_CALL setHostname(const ::rtl::OUString &sDottedIpOrHostname);
110 
115  inline sal_Int32 SAL_CALL getPort() const;
116 
124  inline bool SAL_CALL setPort(sal_Int32 nPort);
125 
131  inline bool SAL_CALL setAddr(const ::rtl::ByteSequence & address);
132 
135  inline ::rtl::ByteSequence SAL_CALL getAddr(oslSocketResult *pResult = NULL) const;
136 
139  inline SocketAddr & SAL_CALL operator= (oslSocketAddr Addr);
140 
141  inline SocketAddr & SAL_CALL operator= (const SocketAddr& Addr);
142 
143 #if defined LIBO_INTERNAL_ONLY
144  inline SocketAddr & operator =(SocketAddr && other);
145 #endif
146 
151  inline SocketAddr & SAL_CALL assign( oslSocketAddr Addr, __osl_socket_NoCopy nocopy );
152 
155  inline bool SAL_CALL operator== (oslSocketAddr Addr) const;
156 
159  inline bool SAL_CALL operator== (const SocketAddr & Addr) const;
160 
163  inline oslSocketAddr SAL_CALL getHandle() const;
164 
170  static inline ::rtl::OUString SAL_CALL getLocalHostname( oslSocketResult *pResult = NULL);
171 
176  static inline void SAL_CALL resolveHostname(
177  const ::rtl::OUString & strHostName , SocketAddr & Addr );
178 
185  static inline sal_Int32 SAL_CALL getServicePort(
186  const ::rtl::OUString& strServiceName,
187  const ::rtl::OUString & strProtocolName= ::rtl::OUString("tcp") );
188  };
189 
190 
191  class Socket
192  {
193  protected:
195  protected:
201  inline Socket(oslSocketType Type,
204  public:
205  inline Socket( );
206 
207  inline Socket( const Socket & socket );
208 
209  inline Socket( oslSocket socketHandle );
210 
216  inline Socket( oslSocket socketHandle, __sal_NoAcquire noacquire );
217 
220  inline ~Socket();
221 
225  inline Socket& SAL_CALL operator= ( oslSocket socketHandle);
226 
230  inline Socket& SAL_CALL operator= (const Socket& sock);
231 
236  inline bool SAL_CALL operator==( const Socket& rSocket ) const ;
237 
242  inline bool SAL_CALL operator==( const oslSocket socketHandle ) const;
243 
249  inline void SAL_CALL shutdown( oslSocketDirection Direction = osl_Socket_DirReadWrite );
250 
256  inline void SAL_CALL close();
257 
262  inline void SAL_CALL getLocalAddr( SocketAddr &Addr ) const;
263 
267  inline sal_Int32 SAL_CALL getLocalPort() const;
268 
272  inline ::rtl::OUString SAL_CALL getLocalHost() const;
273 
277  inline void SAL_CALL getPeerAddr( SocketAddr & Addr) const;
278 
282  inline sal_Int32 SAL_CALL getPeerPort() const;
283 
287  inline ::rtl::OUString SAL_CALL getPeerHost() const;
288 
293  inline bool SAL_CALL bind(const SocketAddr& LocalInterface);
294 
305  inline bool SAL_CALL isRecvReady(const TimeValue *pTimeout = NULL) const;
306 
317  inline bool SAL_CALL isSendReady(const TimeValue *pTimeout = NULL) const;
318 
319 
332  inline bool SAL_CALL isExceptionPending(const TimeValue *pTimeout = NULL) const;
333 
334 
344  inline oslSocketType SAL_CALL getType() const;
345 
427  inline sal_Int32 SAL_CALL getOption(
428  oslSocketOption Option,
429  void* pBuffer,
430  sal_uInt32 BufferLen,
432 
474  inline bool SAL_CALL setOption( oslSocketOption Option,
475  void* pBuffer,
476  sal_uInt32 BufferLen,
478 
482  inline bool setOption( oslSocketOption option, sal_Int32 nValue );
483 
487  inline sal_Int32 getOption( oslSocketOption option ) const;
488 
495  inline bool SAL_CALL enableNonBlockingMode( bool bNonBlockingMode);
496 
500  inline bool SAL_CALL isNonBlockingMode() const;
501 
502 
505  inline void SAL_CALL clearError() const;
506 
514  inline oslSocketError getError() const;
515 
518  inline ::rtl::OUString getErrorAsString( ) const;
519 
522  inline oslSocket getHandle() const;
523  };
524 
525 
526  class StreamSocket : public Socket
527  {
528  public:
540 
541  inline StreamSocket( oslSocket Socket , __sal_NoAcquire noacquire );
542 
543  inline StreamSocket( oslSocket Socket );
544 
554  inline sal_Int32 SAL_CALL read(void* pBuffer, sal_uInt32 n);
555 
563  inline sal_Int32 SAL_CALL write(const void* pBuffer, sal_uInt32 n);
564 
565 
582  inline sal_Int32 SAL_CALL recv(void* pBuffer,
583  sal_uInt32 BytesToRead,
585 
602  sal_Int32 SAL_CALL send(const void* pBuffer,
603  sal_uInt32 BytesToSend,
605  };
606 
608  {
609  public:
621 
622 
632  oslSocketResult SAL_CALL connect(const SocketAddr& TargetHost, const TimeValue* pTimeout = NULL);
633  };
634 
637  class AcceptorSocket : public Socket
638  {
639  public:
643 
651  inline bool SAL_CALL listen(sal_Int32 MaxPendingConnections= -1);
652 
660  inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection);
661 
671  inline oslSocketResult SAL_CALL acceptConnection( StreamSocket& Connection, SocketAddr & PeerAddr);
672  };
673 
674 
677  class DatagramSocket : public Socket
678  {
679  public:
680 
689 
709  inline sal_Int32 SAL_CALL recvFrom(void* pBuffer,
710  sal_uInt32 BufferSize,
711  SocketAddr* pSenderAddr= NULL,
713 
736  inline sal_Int32 SAL_CALL sendTo( const SocketAddr& ReceiverAddr,
737  const void* pBuffer,
738  sal_uInt32 BufferSize,
740  };
741 
742 }
743 
744 #endif
745 
746 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
oslSocketOptionLevel
Represents the different socket-option levels.
Definition: socket.h:118
static inline::rtl::OUString getLocalHostname(oslSocketResult *pResult=NULL)
Get the hostname for the local interface.
Definition: socket.hxx:179
bool operator==(oslSocketAddr Addr) const
Returns true if the underlying handle is identical to the Addr handle.
Definition: socket.hxx:163
struct oslSocketImpl * oslSocket
Definition: socket.h:208
SocketAddr & assign(oslSocketAddr Addr, __osl_socket_NoCopy nocopy)
Assigns the socket addr without copyconstructing it.
Definition: socket.hxx:154
bool setAddr(const ::rtl::ByteSequence &address)
Sets the address of the underlying socket address struct in network byte order.
Definition: socket.hxx:111
SocketAddr()
Creates socket address of unknown type.
Definition: socket.hxx:27
oslSocketOption
Represents socket-options.
Definition: socket.h:82
inline::rtl::OUString getHostname(oslSocketResult *pResult=NULL) const
Converts the address to a (human readable) domain-name.
Definition: socket.hxx:83
oslSocketDirection
Used by shutdown to denote which end of the socket to "close".
Definition: socket.h:141
~SocketAddr()
destroys underlying oslSocketAddress
Definition: socket.hxx:76
static void resolveHostname(const ::rtl::OUString &strHostName, SocketAddr &Addr)
Tries to find an address for a host.
Definition: socket.hxx:188
bool setHostname(const ::rtl::OUString &sDottedIpOrHostname)
Sets the IP address or hostname of the SocketAddress.
Definition: socket.hxx:104
oslSocketAddr getHandle() const
Returns the underlying SocketAddr handle without copyconstructing it.
Definition: socket.hxx:168
oslSocketType
Represents the type of a socket.
Definition: socket.h:64
oslSocketError
Describes the various error socket error conditions, which may occur.
Definition: socket.h:151
Definition: socket.h:119
__osl_socket_NoCopy
Definition: socket_decl.hxx:33
oslSocketMsgFlag
Represents flags to be used with send/recv-calls.
Definition: socket.h:128
Definition: socket.h:53
struct oslSocketAddrImpl * oslSocketAddr
Opaque datatype SocketAddr.
Definition: socket.h:37
oslSocketResult
Common return codes of socket related functions.
Definition: socket.h:190
Definition: socket.h:129
__sal_NoAcquire
Definition: types.h:370
Allows to accept socket connections.
Definition: socket_decl.hxx:637
Definition: socket_decl.hxx:607
oslProtocol
represent a specific protocol within a address-family
Definition: socket.h:52
Definition: socket_decl.hxx:33
oslSocketAddr m_handle
Definition: socket_decl.hxx:42
sal_Int32 getPort() const
Returns the port number of the address.
Definition: socket.hxx:93
This String class provides base functionality for C++ like Unicode character array handling...
Definition: ustring.hxx:123
Definition: time.h:66
The class should be understood as a reference to a socket address handle (struct sockaddr).
Definition: socket_decl.hxx:39
bool setPort(sal_Int32 nPort)
Sets the port number of the address.
Definition: socket.hxx:99
Definition: socket.h:144
static sal_Int32 getServicePort(const ::rtl::OUString &strServiceName, const ::rtl::OUString &strProtocolName=::rtl::OUString("tcp"))
Tries to find the port associated with the given service/protocol- pair (e.g.
Definition: socket.hxx:194
oslSocket m_handle
Definition: socket_decl.hxx:194
Definition: socket.h:43
Definition: condition.hxx:28
Definition: socket_decl.hxx:526
inline::rtl::ByteSequence getAddr(oslSocketResult *pResult=NULL) const
Returns the address of the underlying socket in network byte order.
Definition: socket.hxx:117
SocketAddr & operator=(oslSocketAddr Addr)
assign the handle to this reference.
Definition: socket.hxx:127
Definition: socket.h:65
oslAddrFamily
Represents the address-family of a socket.
Definition: socket.h:42
Definition: socket.h:66
Definition: socket_decl.hxx:191
bool is() const
Checks if the SocketAddr was created successful.
Definition: socket.hxx:174
A connectionless socket to send and receive datagrams.
Definition: socket_decl.hxx:677