summaryrefslogtreecommitdiff
path: root/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/endpoints/src/tcp_server_endpoint_impl.cpp')
-rw-r--r--implementation/endpoints/src/tcp_server_endpoint_impl.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/implementation/endpoints/src/tcp_server_endpoint_impl.cpp b/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
index 39f2802..85766ef 100644
--- a/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
+++ b/implementation/endpoints/src/tcp_server_endpoint_impl.cpp
@@ -85,6 +85,22 @@ void tcp_server_endpoint_impl::stop() {
}
}
+void tcp_server_endpoint_impl::stop_all_connections(const boost::asio::ip::address &_address) {
+ std::lock_guard<std::mutex> its_lock(connections_mutex_);
+ endpoint_type type;
+
+ for (const auto &c : connections_) {
+ if(c.first.address() == _address) {
+ VSOMEIP_INFO << "Stopping connections for " << _address.to_string()
+ << " : " << std::dec << c.first.port();
+ c.second->stop();
+ type = c.first;
+ }
+ }
+ connections_.erase(type);
+}
+
+
bool tcp_server_endpoint_impl::send_to(
const std::shared_ptr<endpoint_definition> _target,
const byte_t *_data,
@@ -162,6 +178,12 @@ void tcp_server_endpoint_impl::accept_cbk(connection::ptr _connection,
_connection->set_remote_info(remote);
// Nagle algorithm off
new_connection_socket.set_option(ip::tcp::no_delay(true), its_error);
+
+ new_connection_socket.set_option(boost::asio::socket_base::keep_alive(true), its_error);
+ if (its_error) {
+ VSOMEIP_WARNING << "tcp_server_endpoint::connect: couldn't enable "
+ << "keep_alive: " << its_error.message();
+ }
}
if (!its_error) {
{
@@ -485,7 +507,9 @@ void tcp_server_endpoint_impl::connection::receive_cbk(
}
}
if (_error == boost::asio::error::eof
- || _error == boost::asio::error::connection_reset) {
+ || _error == boost::asio::error::connection_reset
+ || _error == boost::asio::error::timed_out) {
+ VSOMEIP_WARNING << "tcp_server_endpoint receive_cbk error detected: " << _error.message();
{
std::lock_guard<std::mutex> its_lock(its_server->connections_mutex_);
stop();