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