Skip to content

Commit

Permalink
Problem: VMCI build broken
Browse files Browse the repository at this point in the history
Solution: refactor it
  • Loading branch information
bluca committed Feb 21, 2021
1 parent 38bb82b commit 8fe5b54
Show file tree
Hide file tree
Showing 10 changed files with 232 additions and 296 deletions.
21 changes: 21 additions & 0 deletions src/vmci.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
*/
#include "precompiled.hpp"

#include "ip.hpp"
#include "vmci.hpp"
#include "vmci_address.hpp"

#if defined ZMQ_HAVE_VMCI

Expand Down Expand Up @@ -97,4 +99,23 @@ void zmq::tune_vmci_connect_timeout (ctx_t *context_,
#endif
}

zmq::fd_t zmq::vmci_open_socket (const char *address_,
const zmq::options_t &options_,
zmq::vmci_address_t *out_vmci_addr_)
{
// Convert the textual address into address structure.
int rc = out_vmci_addr_->resolve (address_);
if (rc != 0)
return retired_fd;

// Create the socket.
fd_t s = open_socket (out_vmci_addr_->family (), SOCK_STREAM, 0);

if (s == retired_fd) {
return retired_fd;
}

return s;
}

#endif
4 changes: 4 additions & 0 deletions src/vmci.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ void tune_vmci_connect_timeout (ctx_t *context_,
fd_t sockfd_,
struct timeval timeout_);
#endif

fd_t vmci_open_socket (const char *address_,
const options_t &options_,
vmci_address_t *out_vmci_addr_);
}

#endif
Expand Down
20 changes: 15 additions & 5 deletions src/vmci_address.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@

#include "err.hpp"

zmq::vmci_address_t::vmci_address_t ()
{
memset (&address, 0, sizeof address);
}

zmq::vmci_address_t::vmci_address_t (ctx_t *parent_) : parent (parent_)
{
memset (&address, 0, sizeof address);
Expand All @@ -56,10 +61,6 @@ zmq::vmci_address_t::vmci_address_t (const sockaddr *sa,
memcpy (&address, sa, sa_len);
}

zmq::vmci_address_t::~vmci_address_t ()
{
}

int zmq::vmci_address_t::resolve (const char *path_)
{
// Find the ':' at end that separates address from the port number.
Expand Down Expand Up @@ -125,7 +126,7 @@ int zmq::vmci_address_t::resolve (const char *path_)
return 0;
}

int zmq::vmci_address_t::to_string (std::string &addr_)
int zmq::vmci_address_t::to_string (std::string &addr_) const
{
if (address.svm_family != parent->get_vmci_socket_family ()) {
addr_.clear ();
Expand Down Expand Up @@ -164,4 +165,13 @@ socklen_t zmq::vmci_address_t::addrlen () const
return static_cast<socklen_t> (sizeof address);
}

#if defined ZMQ_HAVE_WINDOWS
unsigned short zmq::vmci_address_t::family () const
#else
sa_family_t zmq::vmci_address_t::family () const
#endif
{
return parent->get_vmci_socket_family ();
}

#endif
11 changes: 7 additions & 4 deletions src/vmci_address.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,25 +43,28 @@ namespace zmq
class vmci_address_t
{
public:
vmci_address_t ();
vmci_address_t (ctx_t *parent_);
vmci_address_t (const sockaddr *sa, socklen_t sa_len, ctx_t *parent_);
~vmci_address_t ();

// This function sets up the address for VMCI transport.
int resolve (const char *path_);

// The opposite to resolve()
int to_string (std::string &addr_);
int to_string (std::string &addr_) const;

#if defined ZMQ_HAVE_WINDOWS
unsigned short family () const;
#else
sa_family_t family () const;
#endif
const sockaddr *addr () const;
socklen_t addrlen () const;

private:
struct sockaddr_vm address;
ctx_t *parent;

vmci_address_t ();

ZMQ_NON_COPYABLE_NOR_MOVABLE (vmci_address_t)
};
}
Expand Down
Loading

0 comments on commit 8fe5b54

Please sign in to comment.