class Core::Sockets::Socket

Network socket class wrapping a BSD-style descriptor.

#include <coresocket.h>

class Socket
{
public:
    // construction

    Socket(SocketID socket);
    Socket(AddressFamily addressFamily, SocketType type, ProtocolType protocol);

    // methods

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

    bool joinMulticastGroup(
        const IPAddress& groupAddress,
        const IPAddress& adapterAddress
    );

    bool leaveMulticastGroup(
        const IPAddress& groupAddress,
        const IPAddress& adapterAddress
    );

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

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

    int receiveFrom(void* buffer, int size, SocketAddress& address, int flags = 0);
    int getErrorCode() const;
    bool wouldBlockOperation(bool writeDirection) const;

    static int select(
        SocketID highestSocket,
        SocketIDSet* readList,
        SocketIDSet* writeList,
        SocketIDSet* errorList,
        int timeout
    );
};

// direct descendants

class SSLSocket;