UDK 3.2.7 C/C++ API Reference
osl/socket.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /*************************************************************************
00003  *
00004  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
00005  *
00006  * Copyright 2000, 2010 Oracle and/or its affiliates.
00007  *
00008  * OpenOffice.org - a multi-platform office productivity suite
00009  *
00010  * This file is part of OpenOffice.org.
00011  *
00012  * OpenOffice.org is free software: you can redistribute it and/or modify
00013  * it under the terms of the GNU Lesser General Public License version 3
00014  * only, as published by the Free Software Foundation.
00015  *
00016  * OpenOffice.org is distributed in the hope that it will be useful,
00017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  * GNU Lesser General Public License version 3 for more details
00020  * (a copy is included in the LICENSE file that accompanied this code).
00021  *
00022  * You should have received a copy of the GNU Lesser General Public License
00023  * version 3 along with OpenOffice.org.  If not, see
00024  * <http://www.openoffice.org/license.html>
00025  * for a copy of the LGPLv3 License.
00026  *
00027  ************************************************************************/
00028 
00029 #ifndef _OSL_SOCKET_H_
00030 #define _OSL_SOCKET_H_
00031 
00032 #include <rtl/ustring.h>
00033 #include <rtl/byteseq.h>
00034 
00035 #include <osl/time.h>
00036 #include <rtl/tencinfo.h>
00037 
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041 
00042 /* error returns */
00043 #define OSL_INADDR_NONE             0xffffffff
00044 #define OSL_INVALID_PORT (-1)
00045 #define OSL_INVALID_IPX_SOCKET_NO   0xffffffff
00046 
00050 typedef struct oslSocketAddrImpl * oslSocketAddr;
00051 
00052 
00056 typedef enum {
00057     osl_Socket_FamilyInet,      /* IP */
00058     osl_Socket_FamilyIpx,       /* Novell IPX/SPX */
00059     osl_Socket_FamilyInvalid,   /* always last entry in enum! */
00060     osl_Socket_Family_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00061 } oslAddrFamily;
00062 
00066 typedef enum {
00067     osl_Socket_ProtocolIp,      /* for all af_inet */
00068     osl_Socket_ProtocolIpx,     /* af_ipx datagram sockets (IPX) */
00069     osl_Socket_ProtocolSpx,     /* af_ipx seqpacket or stream for SPX */
00070     osl_Socket_ProtocolSpxII,   /* af_ipx seqpacket or stream for SPX II */
00071     osl_Socket_ProtocolInvalid,
00072     osl_Socket_Protocol_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00073 } oslProtocol;
00074 
00075 
00079 typedef enum {
00080     osl_Socket_TypeStream,
00081     osl_Socket_TypeDgram,
00082     osl_Socket_TypeRaw,
00083     osl_Socket_TypeRdm,
00084     osl_Socket_TypeSeqPacket,
00085     osl_Socket_TypeInvalid,     /* always last entry in enum! */
00086     osl_Socket_Type_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00087 } oslSocketType;
00088 
00089 
00093 typedef enum {
00094     osl_Socket_OptionDebug,
00095     osl_Socket_OptionAcceptConn,
00096     osl_Socket_OptionReuseAddr,
00097     osl_Socket_OptionKeepAlive,
00098     osl_Socket_OptionDontRoute,
00099     osl_Socket_OptionBroadcast,
00100     osl_Socket_OptionUseLoopback,
00101     osl_Socket_OptionLinger,
00102     osl_Socket_OptionOOBinLine,
00103     osl_Socket_OptionSndBuf,
00104     osl_Socket_OptionRcvBuf,
00105     osl_Socket_OptionSndLowat,
00106     osl_Socket_OptionRcvLowat,
00107     osl_Socket_OptionSndTimeo,
00108     osl_Socket_OptionRcvTimeo,
00109     osl_Socket_OptionError,
00110     osl_Socket_OptionType,
00111     osl_Socket_OptionTcpNoDelay,
00112     osl_Socket_OptionInvalid,       /* always last entry in enum! */
00113     osl_Socket_Option_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00114 } oslSocketOption;
00115 
00119 typedef enum  {
00120     osl_Socket_LevelSocket,
00121     osl_Socket_LevelTcp,
00122     osl_Socket_LevelInvalid,            /* always last entry in enum! */
00123     osl_Socket_Level_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00124 } oslSocketOptionLevel;
00125 
00126 
00130 typedef enum {
00131     osl_Socket_MsgNormal,
00132     osl_Socket_MsgOOB,
00133     osl_Socket_MsgPeek,
00134     osl_Socket_MsgDontRoute,
00135     osl_Socket_MsgMaxIOVLen,
00136     osl_Socket_MsgInvalid,          /* always last entry in enum! */
00137     osl_Socket_Msg_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00138 } oslSocketMsgFlag;
00139 
00143 typedef enum {
00144     osl_Socket_DirRead,
00145     osl_Socket_DirWrite,
00146     osl_Socket_DirReadWrite,
00147     osl_Socket_DirInvalid,          /* always last entry in enum! */
00148     osl_Socket_Dir_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00149 } oslSocketDirection;
00150 
00153 typedef enum {
00154     osl_Socket_E_None,              /* no error */
00155     osl_Socket_E_NotSocket,         /* Socket operation on non-socket */
00156     osl_Socket_E_DestAddrReq,       /* Destination address required */
00157     osl_Socket_E_MsgSize,           /* Message too long */
00158     osl_Socket_E_Prototype,         /* Protocol wrong type for socket */
00159     osl_Socket_E_NoProtocol,        /* Protocol not available */
00160     osl_Socket_E_ProtocolNoSupport, /* Protocol not supported */
00161     osl_Socket_E_TypeNoSupport,     /* Socket type not supported */
00162     osl_Socket_E_OpNotSupport,      /* Operation not supported on socket */
00163     osl_Socket_E_PfNoSupport,       /* Protocol family not supported */
00164     osl_Socket_E_AfNoSupport,       /* Address family not supported by */
00165                                     /* protocol family */
00166     osl_Socket_E_AddrInUse,         /* Address already in use */
00167     osl_Socket_E_AddrNotAvail,      /* Can't assign requested address */
00168     osl_Socket_E_NetDown,           /* Network is down */
00169     osl_Socket_E_NetUnreachable,    /* Network is unreachable */
00170     osl_Socket_E_NetReset,          /* Network dropped connection because */
00171                                     /* of reset */
00172     osl_Socket_E_ConnAborted,       /* Software caused connection abort */
00173     osl_Socket_E_ConnReset,         /* Connection reset by peer */
00174     osl_Socket_E_NoBufferSpace,     /* No buffer space available */
00175     osl_Socket_E_IsConnected,       /* Socket is already connected */
00176     osl_Socket_E_NotConnected,      /* Socket is not connected */
00177     osl_Socket_E_Shutdown,          /* Can't send after socket shutdown */
00178     osl_Socket_E_TooManyRefs,       /* Too many references: can't splice */
00179     osl_Socket_E_TimedOut,          /* Connection timed out */
00180     osl_Socket_E_ConnRefused,       /* Connection refused */
00181     osl_Socket_E_HostDown,          /* Host is down */
00182     osl_Socket_E_HostUnreachable,   /* No route to host */
00183     osl_Socket_E_WouldBlock,        /* call would block on non-blocking socket */
00184     osl_Socket_E_Already,           /* operation already in progress */
00185     osl_Socket_E_InProgress,        /* operation now in progress */
00186     osl_Socket_E_InvalidError,      /* unmapped error: always last entry in enum! */
00187     osl_Socket_E_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00188 } oslSocketError;
00189 
00192 typedef enum {
00193     osl_Socket_Ok,          /* successful completion */
00194     osl_Socket_Error,       /* error occurred, check osl_getLastSocketError() for details */
00195     osl_Socket_TimedOut,    /* blocking operation timed out */
00196     osl_Socket_Interrupted, /* blocking operation was interrupted */
00197     osl_Socket_InProgress,  /* nonblocking operation is in progress */
00198     osl_Socket_FORCE_EQUAL_SIZE = SAL_MAX_ENUM
00199 } oslSocketResult;
00200 
00201 typedef sal_uInt8 oslSocketIpxNetNumber[4];
00202 typedef sal_uInt8 oslSocketIpxNodeNumber[6];
00203 
00215 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createEmptySocketAddr(
00216         oslAddrFamily Family);
00217 
00218 
00221 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_copySocketAddr(
00222         oslSocketAddr Addr);
00223 
00228 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isEqualSocketAddr(
00229     oslSocketAddr Addr1, oslSocketAddr Addr2);
00230 
00236 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_resolveHostname(
00237         rtl_uString *strHostname);
00238 
00248 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createInetBroadcastAddr (
00249     rtl_uString *strDottedAddr, sal_Int32 Port);
00250 
00251 
00259 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_createInetSocketAddr (
00260     rtl_uString *strDottedAddr, sal_Int32 Port);
00261 
00262 
00266 SAL_DLLPUBLIC void SAL_CALL osl_destroySocketAddr(
00267         oslSocketAddr Addr);
00268 
00273 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getServicePort(
00274         rtl_uString *strServicename, rtl_uString *strProtocol);
00275 
00276 
00277 
00282 SAL_DLLPUBLIC oslAddrFamily SAL_CALL osl_getFamilyOfSocketAddr(
00283         oslSocketAddr Addr);
00284 
00285 
00290 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getInetPortOfSocketAddr(
00291         oslSocketAddr Addr);
00292 
00293 
00298 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setInetPortOfSocketAddr(
00299         oslSocketAddr Addr, sal_Int32 Port);
00300 
00301 
00306 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getHostnameOfSocketAddr(
00307         oslSocketAddr Addr, rtl_uString **strHostname);
00308 
00309 
00317 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getDottedInetAddrOfSocketAddr(
00318         oslSocketAddr Addr, rtl_uString **strDottedInetAddr);
00319 
00322 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_setAddrOfSocketAddr(
00323         oslSocketAddr Addr, sal_Sequence *pByteSeq );
00324 
00330 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getAddrOfSocketAddr(
00331         oslSocketAddr Addr, sal_Sequence **ppByteSeq );
00332 
00333 /*
00334     Opaque datatype HostAddr.
00335 */
00336 typedef struct oslHostAddrImpl * oslHostAddr;
00337 
00338 
00344 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddr(
00345         rtl_uString *strHostname, const oslSocketAddr Addr);
00346 
00347 
00355 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddrByName(rtl_uString *strHostname);
00356 
00357 
00365 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_createHostAddrByAddr(const oslSocketAddr Addr);
00366 
00367 
00371 SAL_DLLPUBLIC oslHostAddr SAL_CALL osl_copyHostAddr(const oslHostAddr Addr);
00372 
00373 
00377 SAL_DLLPUBLIC void SAL_CALL osl_destroyHostAddr(oslHostAddr Addr);
00378 
00379 
00383 SAL_DLLPUBLIC void SAL_CALL osl_getHostnameOfHostAddr(const oslHostAddr Addr, rtl_uString **strHostname);
00384 
00385 
00389 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getSocketAddrOfHostAddr(const oslHostAddr Addr);
00390 
00396 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_getLocalHostname(rtl_uString **strLocalHostname);
00397 
00398 
00406 /*-***************************************************************************/
00407 /* oslSocket */
00408 /*-***************************************************************************/
00409 
00410 typedef struct oslSocketImpl * oslSocket;
00411 
00414 SAL_DLLPUBLIC void SAL_CALL osl_acquireSocket( oslSocket Socket );
00415 
00421 SAL_DLLPUBLIC void SAL_CALL osl_releaseSocket( oslSocket Socket );
00422 
00428 SAL_DLLPUBLIC oslSocket SAL_CALL osl_createSocket(
00429                                     oslAddrFamily   Family,
00430                                     oslSocketType   Type,
00431                                     oslProtocol     Protocol);
00432 
00439 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getLocalAddrOfSocket(oslSocket Socket);
00440 
00447 SAL_DLLPUBLIC oslSocketAddr SAL_CALL osl_getPeerAddrOfSocket(oslSocket Socket);
00448 
00455 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_bindAddrToSocket(
00456                                        oslSocket Socket,
00457                                        oslSocketAddr Addr);
00458 
00470 SAL_DLLPUBLIC oslSocketResult SAL_CALL osl_connectSocketTo(
00471                                         oslSocket Socket,
00472                                         oslSocketAddr Addr,
00473                                         const TimeValue* pTimeout);
00474 
00475 
00483 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_listenOnSocket(
00484                            oslSocket Socket,
00485                            sal_Int32 MaxPendingConnections);
00486 
00487 
00494 SAL_DLLPUBLIC oslSocket SAL_CALL osl_acceptConnectionOnSocket
00495                                        (oslSocket Socket,
00496                                        oslSocketAddr* pAddr);
00497 
00518 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receiveSocket(
00519                           oslSocket Socket,
00520                           void* pBuffer,
00521                            sal_uInt32 BytesToRead,
00522                           oslSocketMsgFlag Flag);
00523 
00546 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_receiveFromSocket(
00547                               oslSocket Socket,
00548                               oslSocketAddr SenderAddr,
00549                               void* pBuffer,
00550                               sal_uInt32 BufferSize,
00551                               oslSocketMsgFlag Flag);
00552 
00571 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendSocket(
00572                        oslSocket Socket,
00573                        const void* pBuffer,
00574                         sal_uInt32 BytesToSend,
00575                        oslSocketMsgFlag Flag);
00576 
00602 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_sendToSocket(
00603                          oslSocket Socket,
00604                          oslSocketAddr ReceiverAddr,
00605                           const void* pBuffer,
00606                          sal_uInt32 BytesToSend,
00607                          oslSocketMsgFlag Flag);
00608 
00620 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isReceiveReady(
00621         oslSocket Socket, const TimeValue* pTimeout);
00622 
00633 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isSendReady(
00634         oslSocket Socket, const TimeValue* pTimeout);
00635 
00645 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isExceptionPending(
00646         oslSocket Socket, const TimeValue* pTimeout);
00647 
00658 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_shutdownSocket(oslSocket Socket,
00659                            oslSocketDirection Direction);
00660 
00745 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_getSocketOption( oslSocket Socket,
00746                                oslSocketOptionLevel Level,
00747                             oslSocketOption      Option,
00748                             void*                pBuffer,
00749                             sal_uInt32               BufferLen);
00750 
00771 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_setSocketOption( oslSocket Socket,
00772                             oslSocketOptionLevel    Level,
00773                             oslSocketOption         Option,
00774                             void*                   pBuffer,
00775                             sal_uInt32              BufferLen);
00776 
00783 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_enableNonBlockingMode(
00784         oslSocket Socket, sal_Bool On);
00785 
00786 
00791 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isNonBlockingMode(
00792         oslSocket Socket);
00793 
00794 
00807 SAL_DLLPUBLIC oslSocketType SAL_CALL osl_getSocketType(
00808         oslSocket Socket);
00809 
00813 SAL_DLLPUBLIC void SAL_CALL osl_getLastSocketErrorDescription(
00814         oslSocket Socket, rtl_uString **strError);
00815 
00821 SAL_DLLPUBLIC oslSocketError SAL_CALL osl_getLastSocketError(
00822         oslSocket Socket);
00823 
00826 typedef struct oslSocketSetImpl * oslSocketSet;
00827 
00831 SAL_DLLPUBLIC oslSocketSet SAL_CALL osl_createSocketSet(void);
00832 
00835 SAL_DLLPUBLIC void SAL_CALL osl_destroySocketSet(oslSocketSet Set);
00836 
00840 SAL_DLLPUBLIC void SAL_CALL osl_clearSocketSet(oslSocketSet Set);
00841 
00842 
00847 SAL_DLLPUBLIC void SAL_CALL osl_addToSocketSet(oslSocketSet Set, oslSocket Socket);
00848 
00853 SAL_DLLPUBLIC void SAL_CALL osl_removeFromSocketSet(oslSocketSet Set, oslSocket Socket);
00854 
00860 SAL_DLLPUBLIC sal_Bool SAL_CALL osl_isInSocketSet(oslSocketSet Set, oslSocket Socket);
00861 
00877 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_demultiplexSocketEvents(oslSocketSet IncomingSet,
00878                                     oslSocketSet OutgoingSet,
00879                                     oslSocketSet OutOfBandSet,
00880                                     const TimeValue* pTimeout);
00881 
00884 SAL_DLLPUBLIC void SAL_CALL osl_closeSocket(oslSocket Socket);
00885 
00886 
00895 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_readSocket( oslSocket Socket, void *pBuffer, sal_Int32 nSize );
00896 
00897 
00905 SAL_DLLPUBLIC sal_Int32 SAL_CALL osl_writeSocket( oslSocket Socket, const void *pBuffer, sal_Int32 nSize );
00906 
00912 #ifdef __cplusplus
00913 }
00914 #endif
00915 
00916 #endif  /* _OSL_SOCKET_H_ */
00917 
00918 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines