1 /* 2 * Copyright 2011-2016, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef _ABSTRACT_SOCKET_H 6 #define _ABSTRACT_SOCKET_H 7 8 9 #include <DataIO.h> 10 #include <NetworkAddress.h> 11 12 #include <sys/socket.h> 13 14 15 class BAbstractSocket : public BDataIO { 16 public: 17 BAbstractSocket(); 18 BAbstractSocket(const BAbstractSocket& other); 19 virtual ~BAbstractSocket(); 20 21 status_t InitCheck() const; 22 23 virtual status_t Bind(const BNetworkAddress& local, bool reuseAddr) = 0; 24 virtual bool IsBound() const; 25 virtual bool IsListening() const; 26 27 virtual status_t Listen(int backlog = 10); 28 virtual status_t Accept(BAbstractSocket*& _socket) = 0; 29 30 virtual status_t Connect(const BNetworkAddress& peer, 31 bigtime_t timeout = B_INFINITE_TIMEOUT) = 0; 32 virtual bool IsConnected() const; 33 virtual void Disconnect(); 34 35 virtual status_t SetTimeout(bigtime_t timeout); 36 virtual bigtime_t Timeout() const; 37 38 virtual const BNetworkAddress& Local() const; 39 virtual const BNetworkAddress& Peer() const; 40 41 virtual size_t MaxTransmissionSize() const; 42 43 virtual status_t WaitForReadable(bigtime_t timeout 44 = B_INFINITE_TIMEOUT) const; 45 virtual status_t WaitForWritable(bigtime_t timeout 46 = B_INFINITE_TIMEOUT) const; 47 48 int Socket() const; 49 50 protected: 51 status_t Bind(const BNetworkAddress& local, 52 bool reuseAddr, int type); 53 status_t Connect(const BNetworkAddress& peer, int type, 54 bigtime_t timeout = B_INFINITE_TIMEOUT); 55 status_t AcceptNext(int& _acceptedSocket, 56 BNetworkAddress& _peer); 57 58 private: 59 status_t _OpenIfNeeded(int family, int type); 60 status_t _UpdateLocalAddress(); 61 status_t _WaitFor(int flags, bigtime_t timeout) const; 62 63 protected: 64 status_t fInitStatus; 65 int fSocket; 66 BNetworkAddress fLocal; 67 BNetworkAddress fPeer; 68 bool fIsBound; 69 bool fIsConnected; 70 bool fIsListening; 71 }; 72 73 74 #endif // _ABSTRACT_SOCKET_H 75