class Core::Platform::PosixSocket

#include <coresocket.posix.h>

class PosixSocket: public Core::Platform::ISocket
{
public:
    // construction

    PosixSocket(SocketID socket);

    PosixSocket(
        Sockets::AddressFamily addressFamily,
        Sockets::SocketType type,
        Sockets::ProtocolType protocol
    );

    // methods

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

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

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

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

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

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

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

// direct descendants

class AndroidSocket;
class CocoaSocket;
class LwIPSocket;
class TI32Socket;
class Win32Socket;

Inherited Members

public:
    // 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;