UDK 3.2.7 C/C++ API Reference
|
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: */