Socket::reconfigure_socket called on connection to apply options

'TCP_NODELAY' is set automatically on connection now.
This commit is contained in:
Fred Nicolson 2016-12-31 11:14:26 +00:00
parent 2a5d960e56
commit e0e956cf78
4 changed files with 23 additions and 3 deletions

View File

@ -155,6 +155,12 @@ namespace fr
virtual bool has_data() const = 0; virtual bool has_data() const = 0;
protected: protected:
/*!
* Applies requested socket options to the socket.
* Should be called when a new socket is created.
*/
void reconfigure_socket();
std::string remote_address; std::string remote_address;
bool is_blocking; bool is_blocking;
bool is_connected; bool is_connected;

View File

@ -152,9 +152,11 @@ namespace fr
return Socket::Status::VerificationFailed; return Socket::Status::VerificationFailed;
} }
//Update members //Update state
is_connected = true; is_connected = true;
remote_address = address + ":" + port; remote_address = address + ":" + port;
reconfigure_socket();
return Socket::Status::Success; return Socket::Status::Success;
} }
@ -167,6 +169,7 @@ namespace fr
{ {
is_connected = true; is_connected = true;
ssl_socket_descriptor = std::move(context); ssl_socket_descriptor = std::move(context);
reconfigure_socket();
} }
bool SSLSocket::has_data() const bool SSLSocket::has_data() const

View File

@ -2,6 +2,7 @@
// Created by fred on 06/12/16. // Created by fred on 06/12/16.
// //
#include <netinet/tcp.h>
#include "frnetlib/Socket.h" #include "frnetlib/Socket.h"
namespace fr namespace fr
@ -97,4 +98,11 @@ namespace fr
{ {
::shutdown(get_socket_descriptor(), 0); ::shutdown(get_socket_descriptor(), 0);
} }
void Socket::reconfigure_socket()
{
//todo: Perhaps allow for these settings to be modified
int one = 1;
setsockopt(get_socket_descriptor(), SOL_TCP, TCP_NODELAY, &one, sizeof(one));
}
} }

View File

@ -100,14 +100,13 @@ namespace fr
void TcpSocket::set_descriptor(int descriptor) void TcpSocket::set_descriptor(int descriptor)
{ {
reconfigure_socket();
socket_descriptor = descriptor; socket_descriptor = descriptor;
is_connected = true; is_connected = true;
} }
Socket::Status TcpSocket::connect(const std::string &address, const std::string &port) Socket::Status TcpSocket::connect(const std::string &address, const std::string &port)
{ {
remote_address = address + ":" + port;
addrinfo *info; addrinfo *info;
addrinfo hints; addrinfo hints;
@ -145,7 +144,11 @@ namespace fr
//We're done with this now, cleanup //We're done with this now, cleanup
freeaddrinfo(info); freeaddrinfo(info);
//Update state now we've got a valid socket descriptor
is_connected = true; is_connected = true;
remote_address = address + ":" + port;
reconfigure_socket();
return Socket::Status::Success; return Socket::Status::Success;
} }