1 #include "hmbdc/Copyright.hpp" 4 #include "hmbdc/app/utils/EpollTask.hpp" 5 #include "hmbdc/app/Config.hpp" 6 #include "hmbdc/comm/inet/Misc.hpp" 12 #include <sys/types.h> 13 #include <sys/socket.h> 14 #include <netinet/in.h> 15 #include <arpa/inet.h> 18 namespace hmbdc {
namespace tips {
namespace tcpcast {
23 fd = socket(AF_INET, SOCK_STREAM, 0);
25 HMBDC_THROW(std::runtime_error,
"failed to create socket, errno=" << errno);
28 int flags = fcntl(fd, F_GETFL, 0);
30 if (fcntl(fd, F_SETFL, flags) < 0) {
31 HMBDC_THROW(std::runtime_error,
"fcntl failed errno=" << errno);
35 if (setsockopt(fd, SOL_SOCKET,SO_REUSEADDR, &yes,
sizeof(yes)) < 0) {
36 HMBDC_LOG_C(
"failed to set reuse address errno=", errno);
39 localAddr.sin_family = AF_INET;
40 localAddr.sin_addr.s_addr = inet_addr(hmbdc::comm::inet::getLocalIpMatchMask(
41 cfg.
getExt<std::string>(
"ifaceAddr")).c_str());
42 localAddr.sin_port = htons(cfg.
getExt<uint16_t>(
"tcpPort"));
43 if (::bind(fd, (sockaddr*)&localAddr,
sizeof(localAddr)) < 0) {
44 HMBDC_THROW(std::runtime_error,
"failed to bind, errno=" << errno);
47 auto addrLen = socklen_t(
sizeof(localAddr));
48 if (getsockname(fd, (sockaddr*)&localAddr, &addrLen) < 0) {
49 HMBDC_THROW(std::runtime_error,
"getsockname failure, errno=" << errno);
52 char ipaddr[INET_ADDRSTRLEN];
53 if (!inet_ntop(AF_INET, &(localAddr.sin_addr), ipaddr, INET_ADDRSTRLEN)) {
54 HMBDC_THROW(std::runtime_error,
"failed to inet_ntop, errno=" << errno);
57 localPort = htons(localAddr.sin_port);
60 sockaddr_in localAddr;
66 using ptr = std::shared_ptr<Transport>;
70 cfg (hmbdcName_,
"hmbdcName")
71 (schedPolicy_,
"schedPolicy")
72 (schedPriority_,
"schedPriority")
76 std::tuple<char const*, int> schedSpec()
const {
77 return std::make_tuple(this->schedPolicy_.c_str(), this->schedPriority_);
80 bool operator == (
Transport const& other )
const {
81 return &config_ == &other.config_;
84 bool operator < (
Transport const& other )
const {
85 return &config_ < &other.config_;
91 char const* hmbdcName()
const {
92 return this->hmbdcName_.c_str();
99 std::string hmbdcName_;
100 std::string schedPolicy_;
T getExt(const path_type ¶m, bool throwIfMissing=true) const
get a value from the config
Definition: Config.hpp:238
class to hold an hmbdc configuration
Definition: Config.hpp:45
Definition: Transport.hpp:65
Definition: EpollTask.hpp:87
Definition: Transport.hpp:20