Recv timeouts can now be specified for sockets, which is the maximum amount of time to wait before returning during a receive. They will return WouldBlock if no data was received during the wait time.
Receiving a HTTP request in non-blocking mode will no longer fail.
Added missing move/copy constructor deletors to SSLSocket, to prevent the object from becoming invalid.
Removed noexcept specifier from some constructors where valid exceptions can be thrown.
Exceptions are now thrown from the SSLSocket constructor if it fails to initialise properly, rather than printing something out to stderr and continuing.
Replaced instances of resize&memcpy with append, which gives a noticeable performance boost.
fr::Packet::operator<<(const char *str) no longer converts str into an std::string before adding it, removing an unneeded copy.
fr::Packet::clear no longer calls erase, should result in more of the internal buffer remaining allocated.
Framing for std::vector's has been changed from a uint64_t to a uint32_t (breaking change for packet framing!)
Fixed SSLListener failing to accept SSLSockets properly (not setting the descriptor properly).
TcpSocket::receive_raw and SSLSocket::receive_raw now behave the same, rather than SSLSocket acting more like Socket::receive_all.
Documented specific return values from Socket::receive_all().
Socket::receive_all now returns WouldBlock if the socket is in blocking mode and the first read returns no data, so it doesn't behave like a blocking socket.
Disabled copying/moving of sockets. Copying shouldn't have been enabled, but might add move constructors in the future.
Added Socket::disconnect, which internally just calls close_socket, to allow for protocol-specific disconnect sequences in the future (WebSockets).
Socket mutexes are no longer really required, and so have been removed.
Added more tests for network encoding functions, and the URL parser.
The URL parser now returns a path preceeded with a '/' instead of cutting it out. Added get_uri() to URL, for getting the whole URI, so users don't have to concat it themselves from the more specialised functions.
Fixed default socket connect timeout checking for the wrong value.
Fixed request_type_strings not containing all of the possible request types.
Fixed README using old socket close syntax.
Cleaned up the examples a bit.
Receiving an http request/response will now return errors like HttpHeaderTooBig, instead of the type being set to that.
Added fr::Socket::status_to_string for converting status values into English strings.
Added the ability to disable certificate verification for SSL sockets which is useful for testing.
Added the ability to specify maximum HTTP request header/body sizes in the CMake build config to prevent a malicious client from causing OOM errors.
Fixed a bug in HttpResponse and HttpRequest parse causing it to abort if the request is invalid in some cases.
fr::HttpSocket has been removed.
fr::Sendable has been added. Classes can inherit this if they want to be sendable through sockets. Both fr::Http (which is inherited by fr::HttpRequest and fr::HttpResponse), and fr::Packet inherit this, to allow them to be sent through fr::Socket::send()/fr::Socket::receive().
Fixed broken fr::SocketSelector and fr::SocketReactor, as they no longer accepted fr::Listener's due to fr::Listener no longer inheriting fr::Socket.
Build errors have been fixed, but there are build warnings remaining about unsafe conversions, because Visual C++'s network conversion functions have a differing return type to mine. To be fixed in the future.
Fixed deadlock in fr::Socket::receive.
Fixed fr::Packet's second constructor not delegating to first, causing it's intenal buffer to remain unitialised.
SocketReactor actually calls callbacks.
receive_all no longer tries to access out of bound array indexes.
fr::Packet constructor can now take as many arguments as you like and they'll be added to it automatically.
Added bool fr::Packet<< operator overload.
Sockets will immediately return fr::Socket::Status::Disconnected if an attempt to send/receive data is made whilst the connection is closed.
Added SocketReactor, which is effectively a little wrapper around fr::SocketSelector, but can automatically call a callback for a socket when data is received on it.