00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00039 #ifndef OW_INETSERVERSOCKETIMPL_HPP_INCLUDE_GUARD_
00040 #define OW_INETSERVERSOCKETIMPL_HPP_INCLUDE_GUARD_
00041 #include "OW_config.h"
00042 #include "OW_SelectableIFC.hpp"
00043 #include "OW_Socket.hpp"
00044 #include "OW_SocketAddress.hpp"
00045 #include "OW_Types.hpp"
00046 #include "OW_File.hpp"
00047 #include "OW_SocketFlags.hpp"
00048 #include "OW_IntrusiveCountableBase.hpp"
00049 #include "OW_SSLCtxMgr.hpp"
00050
00051
00052
00053
00054 namespace OW_NAMESPACE
00055 {
00056
00057 class OW_COMMON_API ServerSocketImpl : public SelectableIFC
00058 {
00059 public:
00060 ServerSocketImpl(SSLServerCtxRef sslCtx);
00061 ServerSocketImpl(SocketFlags::ESSLFlag isSSL);
00062 ~ServerSocketImpl();
00063 String addrString();
00064 Socket accept(int timeoutSecs=-1);
00065 void close();
00066
00067
00068 SocketAddress getLocalAddress() { return m_localAddress; }
00069 SocketHandle_t getfd() const { return m_sockfd; }
00070
00071
00072
00073 void doListen(UInt16 port, SocketFlags::ESSLFlag isSSL, int queueSize=10,
00074 const String& listenAddr = SocketAddress::ALL_LOCAL_ADDRESSES,
00075 SocketFlags::EReuseAddrFlag reuseAddr = SocketFlags::E_REUSE_ADDR);
00076
00077 void doListen(UInt16 port, int queueSize=10,
00078 const String& listenAddr = SocketAddress::ALL_LOCAL_ADDRESSES,
00079 SocketFlags::EReuseAddrFlag reuseAddr = SocketFlags::E_REUSE_ADDR);
00080
00081 #ifndef OW_WIN32
00082 void doListen(const String& filename, int queueSize=10,
00083 bool reuseAddr = true);
00084 bool waitForIO(int fd, int timeOutSecs, SocketFlags::EWaitDirectionFlag forInput) OW_DEPRECATED;
00085 #endif
00086
00087 Select_t getSelectObj() const;
00088 private:
00089 void fillAddrParms();
00090 SocketHandle_t m_sockfd;
00091
00092
00093 SocketAddress m_localAddress;
00094 bool m_isActive;
00095 ServerSocketImpl(const ServerSocketImpl& arg);
00096 ServerSocketImpl& operator=(const ServerSocketImpl& arg);
00097 SocketFlags::ESSLFlag m_isSSL;
00098
00099 #ifdef OW_WIN32
00100 #pragma warning (push)
00101 #pragma warning (disable: 4251)
00102 #endif
00103
00104 SSLServerCtxRef m_sslCtx;
00105 #if defined(OW_WIN32)
00106 #pragma warning (pop)
00107 HANDLE m_event;
00108 bool m_shuttingDown;
00109 #else
00110 File m_udsFile;
00111 #endif
00112 };
00113
00114 }
00115
00116 #endif