// ********************************************************************** // // Copyright (c) 2003-2005 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef ICE_UDP_TRANSCEIVER_H #define ICE_UDP_TRANSCEIVER_H #include #include #include #include #include #include #ifndef _WIN32 # include // For struct sockaddr_in #endif namespace IceInternal { class UdpEndpoint; class SUdpTransceiver; class UdpTransceiver : public Transceiver { public: virtual SOCKET fd(); virtual void close(); virtual void shutdownWrite(); virtual void shutdownReadWrite(); virtual void write(Buffer&, int); virtual void read(Buffer&, int); virtual std::string type() const; virtual std::string toString() const; virtual void initialize(int); bool equivalent(const std::string&, int) const; int effectivePort() const; private: UdpTransceiver(const InstancePtr&, const std::string&, int); UdpTransceiver(const InstancePtr&, const std::string&, int, bool); virtual ~UdpTransceiver(); void setBufSize(const InstancePtr&); friend class UdpEndpointI; const TraceLevelsPtr _traceLevels; const Ice::LoggerPtr _logger; const Ice::StatsPtr _stats; const bool _incoming; SOCKET _fd; struct sockaddr_in _addr; fd_set _rFdSet; fd_set _wFdSet; bool _connect; int _rcvSize; int _sndSize; const bool _warn; static const int _udpOverhead; static const int _maxPacketSize; bool _shutdownReadWrite; IceUtil::Mutex _shutdownReadWriteMutex; }; } #endif