| 67 | } |
| 68 | |
| 69 | int RelayHandler::open(const ACE_INET_Addr& address) |
| 70 | { |
| 71 | if (socket_.open(address) != 0) { |
| 72 | ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: RelayHandler::open %C failed to open socket on '%C'\n", |
| 73 | name_.c_str(), OpenDDS::DCPS::LogAddr(address).c_str())); |
| 74 | return -1; |
| 75 | } |
| 76 | if (socket_.enable(ACE_NONBLOCK) != 0) { |
| 77 | ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: RelayHandler::open %C failed to enable ACE_NONBLOCK\n", name_.c_str())); |
| 78 | return -1; |
| 79 | } |
| 80 | |
| 81 | int buffer_size = config_.buffer_size(); |
| 82 | |
| 83 | if (socket_.set_option(SOL_SOCKET, |
| 84 | SO_SNDBUF, |
| 85 | (void *) &buffer_size, |
| 86 | sizeof(buffer_size)) < 0 |
| 87 | && errno != ENOTSUP) { |
| 88 | ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: RelayHandler::open %C failed to set the send buffer size to %d errno %m\n", name_.c_str(), buffer_size)); |
| 89 | return -1; |
| 90 | } |
| 91 | |
| 92 | if (socket_.set_option(SOL_SOCKET, |
| 93 | SO_RCVBUF, |
| 94 | (void *) &buffer_size, |
| 95 | sizeof(buffer_size)) < 0 |
| 96 | && errno != ENOTSUP) { |
| 97 | ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: RelayHandler::open %C failed to set the receive buffer size to %d errno %m\n", name_.c_str(), buffer_size)); |
| 98 | return -1; |
| 99 | } |
| 100 | |
| 101 | if (reactor()->register_handler(this, READ_MASK) != 0) { |
| 102 | ACE_ERROR((LM_ERROR, "(%P|%t) ERROR: RelayHandler::open %C failed to register READ_MASK handler\n", name_.c_str())); |
| 103 | return -1; |
| 104 | } |
| 105 | |
| 106 | return 0; |
| 107 | } |
| 108 | |
| 109 | int RelayHandler::handle_input(ACE_HANDLE handle) |
| 110 | { |
no test coverage detected