struct Core::Platform::ISocket

#include <coreplatformsocket.h>

struct ISocket
{
    // methods

    virtual SocketID getDescriptor() const = 0;
    virtual bool connect(const Sockets::SocketAddress& address) = 0;
    virtual bool disconnect() = 0;
    virtual bool isConnected() const = 0;
    virtual bool bind(const Sockets::SocketAddress& address) = 0;
    virtual bool listen(int maxConnections) = 0;
    virtual SocketID accept() = 0;
    virtual bool getPeerAddress(Sockets::SocketAddress& address) const = 0;
    virtual bool getLocalAddress(Sockets::SocketAddress& address) const = 0;
    virtual bool setOption(int option, int value) = 0;
    virtual bool getOption(int& value, int option) const = 0;

    virtual bool joinMulticastGroup(
        const Sockets::IPAddress& groupAddress,
        const Sockets::IPAddress& adapterAddress
    ) = 0;

    virtual bool leaveMulticastGroup(
        const Sockets::IPAddress& groupAddress,
        const Sockets::IPAddress& adapterAddress
    ) = 0;

    virtual bool isReadable(int timeout = 0) const = 0;
    virtual bool isWritable(int timeout = 0) const = 0;
    virtual bool isAnyError(int timeout = 0) const = 0;
    virtual int send(const void* buffer, int size, int flags = 0) = 0;
    virtual int sendAll(const void* buffer, int size, int flags = 0) = 0;
    virtual int receive(void* buffer, int size, int flags = 0) = 0;
    virtual int getBytesAvailable(int& bytesAvailable) = 0;

    virtual int sendTo(
        const void* buffer,
        int size,
        const Sockets::SocketAddress& address,
        int flags = 0
    ) = 0;

    virtual int receiveFrom(
        void* buffer,
        int size,
        Sockets::SocketAddress& address,
        int flags = 0
    ) = 0;

    virtual int getErrorCode() const = 0;
    virtual bool wouldBlockOperation(bool writeDirection) const = 0;
};

// direct descendants

class PosixSocket;