diff --git a/clients/roscpp/CHANGELOG.rst b/clients/roscpp/CHANGELOG.rst index ab15d717c4..863f41e943 100644 --- a/clients/roscpp/CHANGELOG.rst +++ b/clients/roscpp/CHANGELOG.rst @@ -2,6 +2,10 @@ Changelog for package roscpp ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Forthcoming +----------- +* fix bug in transport_tcp (`#1050 `_) + 1.12.7 (2017-02-17) ------------------- * move connection specific log message to new name roscpp_internal.connections (`#980 `_) diff --git a/clients/roscpp/src/libros/transport/transport_tcp.cpp b/clients/roscpp/src/libros/transport/transport_tcp.cpp index 6417121317..9605dbbfc9 100644 --- a/clients/roscpp/src/libros/transport/transport_tcp.cpp +++ b/clients/roscpp/src/libros/transport/transport_tcp.cpp @@ -311,9 +311,10 @@ bool TransportTCP::connect(const std::string& host, int port) int ret = ::connect(sock_, (sockaddr*) &sas, sas_len); // windows might need some time to sleep (input from service robotics hack) add this if testing proves it is necessary. - ROS_ASSERT((flags_ & SYNCHRONOUS) || ret != 0); + // ROS_ASSERT((flags_ & SYNCHRONOUS) || ret != 0); if (((flags_ & SYNCHRONOUS) && ret != 0) || // synchronous, connect() should return 0 - (!(flags_ & SYNCHRONOUS) && last_socket_error() != ROS_SOCKETS_ASYNCHRONOUS_CONNECT_RETURN)) // asynchronous, connect() should return -1 and WSAGetLastError()=WSAEWOULDBLOCK/errno=EINPROGRESS + (!(flags_ & SYNCHRONOUS) && ret != 0 && last_socket_error() != ROS_SOCKETS_ASYNCHRONOUS_CONNECT_RETURN)) + // asynchronous, connect() may return 0 or -1. When return -1, WSAGetLastError()=WSAEWOULDBLOCK/errno=EINPROGRESS { ROSCPP_CONN_LOG_DEBUG("Connect to tcpros publisher [%s:%d] failed with error [%d, %s]", host.c_str(), port, ret, last_socket_error_string()); close();