TransportTCPPtr TransportTCP::accept() { ROS_ASSERT(is_server_); sockaddr client_address; socklen_t len = sizeof(client_address); int new_sock = ::accept(sock_, (sockaddr *)&client_address, &len); if (new_sock >= 0) { ROSCPP_LOG_DEBUG("Accepted connection on socket [%d], new socket [%d]", sock_, new_sock); TransportTCPPtr transport(boost::make_shared<TransportTCP>(poll_set_, flags_)); if (!transport->setSocket(new_sock)) { ROS_ERROR("Failed to set socket on transport for socket %d", new_sock); } return transport; } else { ROS_ERROR("accept() on socket [%d] failed with error [%s]", sock_, last_socket_error_string()); } return TransportTCPPtr(); }
void ConnectionManager::start() { poll_manager_ = PollManager::instance(); poll_conn_ = poll_manager_->addPollThreadListener(boost::bind(&ConnectionManager::removeDroppedConnections, this)); // Bring up the TCP listener socket tcpserver_transport_ = TransportTCPPtr(new TransportTCP(&poll_manager_->getPollSet())); if (!tcpserver_transport_->listen(network::getTCPROSPort(), MAX_TCPROS_CONN_QUEUE, boost::bind(&ConnectionManager::tcprosAcceptConnection, this, _1))) { ROS_FATAL("Listen on port [%d] failed", network::getTCPROSPort()); ROS_BREAK(); } // Bring up the UDP listener socket udpserver_transport_ = TransportUDPPtr(new TransportUDP(&poll_manager_->getPollSet())); if (!udpserver_transport_->createIncoming(0, true)) { ROS_FATAL("Listen failed"); ROS_BREAK(); } }