28 #if defined(__linux__) 29 #include <linux/sockios.h> 30 #include <sys/ioctl.h> 38 time::milliseconds TcpTransport::s_initialReconnectWait = time::seconds(1);
39 time::milliseconds TcpTransport::s_maxReconnectWait = time::minutes(5);
40 float TcpTransport::s_reconnectWaitMultiplier = 2.0f;
44 , m_remoteEndpoint(m_socket.remote_endpoint())
45 , m_nextReconnectWait(s_initialReconnectWait)
50 if (
m_socket.local_endpoint().address().is_loopback() &&
51 m_socket.remote_endpoint().address().is_loopback())
71 #if defined(__linux__) 73 if (ioctl(
m_socket.native_handle(), SIOCOUTQNSD, &nsd) < 0) {
74 NFD_LOG_FACE_WARN(
"Failed to obtain send queue length from socket: " << std::strerror(errno));
112 boost::system::error_code error;
124 TcpTransport::reconnect()
144 [
this] { handleReconnectTimeout(); });
145 m_socket.async_connect(m_remoteEndpoint,
146 [
this] (
const boost::system::error_code& error) { handleReconnect(error); });
150 TcpTransport::handleReconnect(
const boost::system::error_code& error)
155 error == boost::asio::error::operation_aborted) {
165 m_reconnectEvent.
cancel();
166 m_nextReconnectWait = s_initialReconnectWait;
175 TcpTransport::handleReconnectTimeout()
178 boost::system::error_code error;
182 m_nextReconnectWait =
183 std::min(time::duration_cast<time::milliseconds>(m_nextReconnectWait * s_reconnectWaitMultiplier),
193 m_reconnectEvent.
cancel();
void afterChangePersistency(ndn::nfd::FacePersistency oldPersistency) final
invoked after the persistency has been changed
void setPersistency(ndn::nfd::FacePersistency newPersistency)
changes face persistency setting
void doClose() override
performs Transport specific operations to close the transport
void cancel()
cancels the event manually
void doClose() final
performs Transport specific operations to close the transport
TcpTransport(protocol::socket &&socket, ndn::nfd::FacePersistency persistency)
#define NFD_LOG_FACE_TRACE(msg)
Log a message at TRACE level.
#define NFD_LOG_INCLASS_TEMPLATE_SPECIALIZATION_DEFINE(cls, specialization, name)
const ssize_t MTU_UNLIMITED
indicates the transport has no limit on payload size
void setRemoteUri(const FaceUri &uri)
virtual void handleError(const boost::system::error_code &error)
detail::SimulatorIo & getGlobalIoService()
boost::asio::ip::tcp protocol
void setLinkType(ndn::nfd::LinkType linkType)
size_t getSendQueueBytes() const
ssize_t getSendQueueLength() final
Implements Transport for stream-based protocols.
protocol::socket m_socket
the transport is being closed due to a failure
void setScope(ndn::nfd::FaceScope scope)
#define NFD_LOG_FACE_INFO(msg)
Log a message at INFO level.
TransportState getState() const
Copyright (c) 2011-2015 Regents of the University of California.
the transport is closed, and can be safely deallocated
void post(const std::function< void()> &callback)
void setLocalUri(const FaceUri &uri)
void handleError(const boost::system::error_code &error) final
the transport is being closed gracefully, either by the peer or by a call to close() ...
represents the underlying protocol and address used by a Face
void resetReceiveBuffer()
ndn::nfd::FacePersistency getPersistency() const
bool canChangePersistencyToImpl(ndn::nfd::FacePersistency newPersistency) const final
invoked by canChangePersistencyTo to perform the check
EventId schedule(time::nanoseconds after, const EventCallback &event)
schedule an event
void setState(TransportState newState)
set transport state
the transport is up and can transmit packets
#define NFD_LOG_FACE_WARN(msg)
Log a message at WARN level.
the transport is temporarily down, and is being recovered