Skip to content

Commit

Permalink
Use move constructor for dgram_over_stream
Browse files Browse the repository at this point in the history
This means that ownership is taken from the original socket.
  • Loading branch information
dermesser committed Sep 26, 2016
1 parent f9b084a commit 886acde
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 16 deletions.
14 changes: 7 additions & 7 deletions C++/dgramoverstream.cpp
Expand Up @@ -36,8 +36,8 @@

namespace libsocket {

dgram_over_stream::dgram_over_stream(const stream_client_socket& inner)
: inner(inner)
dgram_over_stream::dgram_over_stream(stream_client_socket&& socket)
: inner(std::unique_ptr<stream_client_socket>(new stream_client_socket(std::move(socket))))
{
enable_nagle(false);
}
Expand All @@ -56,7 +56,7 @@ namespace libsocket {
void dgram_over_stream::enable_nagle(bool enabled) const
{
int enabled_ = int(!enabled);
inner.set_sock_opt(IPPROTO_TCP, TCP_NODELAY, (const char*)&enabled_, sizeof(int));
inner->set_sock_opt(IPPROTO_TCP, TCP_NODELAY, (const char*)&enabled_, sizeof(int));
}

ssize_t dgram_over_stream::sndmsg(const std::string& msg)
Expand Down Expand Up @@ -154,12 +154,12 @@ namespace libsocket {
ssize_t dgram_over_stream::sndmsg(const void* buf, size_t len)
{
encode_uint32(uint32_t(len), prefix_buffer);
ssize_t result = inner.snd(prefix_buffer, FRAMING_PREFIX_LENGTH, 0);
ssize_t result = inner->snd(prefix_buffer, FRAMING_PREFIX_LENGTH, 0);

if (result < 0)
return result;

result = inner.snd(buf, len, 0);
result = inner->snd(buf, len, 0);

if (result < 0)
return result;
Expand Down Expand Up @@ -211,7 +211,7 @@ namespace libsocket {
size_t pos = 0;

do {
ssize_t recvd = inner.rcv(RECV_BUF+pos, rest_len, 0);
ssize_t recvd = inner->rcv(RECV_BUF+pos, rest_len, 0);

if (recvd <= 0)
return n - rest_len;
Expand All @@ -233,7 +233,7 @@ namespace libsocket {
ssize_t pos = 0;

do {
ssize_t result = inner.rcv(prefix_buffer + pos, FRAMING_PREFIX_LENGTH, 0);
ssize_t result = inner->rcv(prefix_buffer + pos, FRAMING_PREFIX_LENGTH, 0);

if (result < 0)
throw socket_exception(__FILE__, __LINE__, "dgram_over_stream::receive_header(): Could not receive length prefix!", false);
Expand Down
4 changes: 2 additions & 2 deletions C++/socket.cpp
Expand Up @@ -45,7 +45,7 @@ namespace libsocket
* @brief Move constructor.
*/
socket::socket(socket&& other) : sfd(other.sfd), is_nonblocking(false), close_on_destructor(true) {
other.sfd = -1;
other.sfd = -1;
}

/**
Expand All @@ -57,7 +57,7 @@ namespace libsocket
* This is possible because socket::~socket(const socket&) is deleted.
*/
if ( close_on_destructor )
destroy();
destroy();
}

/**
Expand Down
8 changes: 4 additions & 4 deletions examples++/dgram_over_stream.cpp
Expand Up @@ -75,7 +75,7 @@ void run_client(void) {
memset(buf, 0, bufsize);

libsocket::inet_stream client(HOST, PORT, LIBSOCKET_IPv4);
libsocket::dgram_over_stream dgram_cl(client);
libsocket::dgram_over_stream dgram_cl(std::move(client));

dgram_cl.sndmsg("Hello", 5);
std::cout << "Client received " << dgram_cl.rcvmsg(buf, bufsize) << " bytes.\n";
Expand All @@ -86,7 +86,7 @@ void run_client(void) {

void run_string_client(void) {
libsocket::inet_stream client(HOST, PORT, LIBSOCKET_IPv4);
libsocket::dgram_over_stream dgram_cl(client);
libsocket::dgram_over_stream dgram_cl(std::move(client));

std::string recvbuf(0, 'a');
recvbuf.resize(3);
Expand All @@ -100,7 +100,7 @@ void run_string_client(void) {

void run_vec_client(void) {
libsocket::inet_stream client(HOST, PORT, LIBSOCKET_IPv4);
libsocket::dgram_over_stream dgram_cl(client);
libsocket::dgram_over_stream dgram_cl(std::move(client));

std::vector<uint8_t> recvbuf;
recvbuf.resize(15);
Expand All @@ -123,7 +123,7 @@ void run_server(void) {

while (true) {
libsocket::inet_stream* client = srv.accept(1);
libsocket::dgram_over_stream dgram_cl(*client);
libsocket::dgram_over_stream dgram_cl(std::move(*client));
ssize_t len = 0;

std::cout << "Server received " << (len = dgram_cl.rcvmsg(buf, bufsize)) << " bytes.\n";
Expand Down
8 changes: 5 additions & 3 deletions headers/dgramoverstream.hpp
Expand Up @@ -8,6 +8,8 @@

# include <string>
# include <vector>
# include <memory>


# include <netinet/ip.h>
# include <netinet/tcp.h>
Expand Down Expand Up @@ -70,8 +72,8 @@ namespace libsocket
class dgram_over_stream {
public:
dgram_over_stream(void) = delete;
dgram_over_stream(const stream_client_socket& inner);

dgram_over_stream(const dgram_over_stream&) = delete;
dgram_over_stream(stream_client_socket&& inner);

void enable_nagle(bool enable) const;

Expand All @@ -88,7 +90,7 @@ namespace libsocket
static const size_t RECV_BUF_SIZE = 256;

// The underlying stream.
stream_client_socket inner;
std::unique_ptr<stream_client_socket> inner;
char prefix_buffer[FRAMING_PREFIX_LENGTH];
char RECV_BUF[RECV_BUF_SIZE];

Expand Down

0 comments on commit 886acde

Please sign in to comment.