/******************************************************************************* * BSocket.h BSocket Access Classes * T.Barnaby, BEAM Ltd, 1/4/05 * Copyright (c) 2012 All Right Reserved, Beam Ltd, http://www.beam.ltd.uk ******************************************************************************* */ #ifndef BSOCKET_H #define BSOCKET_H 1 #include <BString.h> #include <BError.h> #include <BTypes.h> #include <stdint.h> #include <sys/types.h> #ifndef __Lynx__ #include <sys/prctl.h> #else #include <netinet/in.h> #define SOL_IP 0 #define SO_PRIORITY 12 #define MSG_NOSIGNAL 0 #endif /// Socket Address class BSocketAddress { public: typedef struct sockaddr SockAddr; BSocketAddress(); BSocketAddress(const BSocketAddress& add); BSocketAddress(SockAddr* address, int len); ~BSocketAddress(); BError set(SockAddr* address, int len); const SockAddr* raw() const; int len() const; // Operator functions BSocketAddress& operator=(const BSocketAddress& add); operator const SockAddr*() const { return raw(); } int operator==(const BSocketAddress& add) const; int operator!=(const BSocketAddress& add) const; private: int olen; SockAddr* oaddress; }; /// IP aware socket address class BSocketAddressINET : public BSocketAddress { public: typedef struct sockaddr_in SockAddrIP; BError set(BString hostName, uint32_t port); BError set(uint32_t address, uint32_t port); BError set(BString hostName, BString service, BString type); void setPort(uint32_t port); uint32_t address(); ///< Returns socket ip address uint32_t port(); ///< Returns socket port BString getString(); ///< Return string version of address <ip>:<port> // Some useful generic system functions static BString getHostName(); ///< Get this hosts network name static BList<uint32_t> getIpAddresses(); ///< Get a list of all the IP addresses of this host static BList<BString> getIpAddressList(); ///< Get a list of all the IP addresses of this host under hostname static BList<BString> getIpAddressListAll(); ///< Get a list of all the IP addresses of this host looking at physical interfaces }; class BSocket { public: enum NType { STREAM, DGRAM }; enum Priority { PriorityLow, PriorityNormal, PriorityHigh }; BSocket(); BSocket(int fd); BSocket(NType type); BSocket(int domain, int type, int protocol); ~BSocket(); BError init(int domain, int type, int protocol); BError init(NType type); void setFd(int fd); int getFd(); // Main functions BError bind(const BSocketAddress& add); BError connect(const BSocketAddress& add); BError shutdown(int how); BError close(); BError listen(int backlog = 5); BError accept(int& fd); BError accept(int& fd, BSocketAddress& address); // Main data transfer functions BError send(const void* buf, BSize nbytes, BSize& nbytesSent, int flags = 0); BError sendTo(const BSocketAddress& address, const void* buf, BSize nbytes, BSize& nbytesSent, int flags = 0); BError recv(void* buf, BSize maxbytes, BSize& nbytesRecv, int flags = 0); BError recvFrom(BSocketAddress& address, void* buf, BSize maxbytes, BSize& nbytesRecv, int flags = 0); BError recvWithTimeout(void* buf, BSize maxbytes, BSize& nbytesRecv, int timeout, int flags = 0); BError recvFromWithTimeout(BSocketAddress& address, void* buf, BSize maxbytes, BSize& nbytesRecv, int timeout, int flags = 0); // Configuration functions BError setSockOpt(int level, int optname, void* optval, unsigned int optlen); BError getSockOpt(int level, int optname, void* optval, unsigned int* optlen); BError setReuseAddress(int on); BError setBroadCast(int on); BError setPriority(Priority priority); BError getMTU(uint32_t& mtu); BError getAddress(BSocketAddress& address); private: int osocket; }; #endif