diff --git a/src/ur_communication.cpp b/src/ur_communication.cpp index 2b5224b..0f27cc7 100644 --- a/src/ur_communication.cpp +++ b/src/ur_communication.cpp @@ -44,10 +44,14 @@ UrCommunication::UrCommunication(std::condition_variable& msg_cond, flag_ = 1; setsockopt(pri_sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, sizeof(int)); + setsockopt(pri_sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, + sizeof(int)); setsockopt(pri_sockfd_, SOL_SOCKET, SO_REUSEADDR, (char *) &flag_, sizeof(int)); setsockopt(sec_sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, sizeof(int)); + setsockopt(sec_sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, + sizeof(int)); setsockopt(sec_sockfd_, SOL_SOCKET, SO_REUSEADDR, (char *) &flag_, sizeof(int)); fcntl(sec_sockfd_, F_SETFL, O_NONBLOCK); @@ -69,7 +73,7 @@ bool UrCommunication::start() { } print_debug("Acquire firmware version: Got connection"); bytes_read = read(pri_sockfd_, buf, 512); - setsockopt(pri_sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, + setsockopt(pri_sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, sizeof(int)); robot_state_->unpack(buf, bytes_read); //wait for some traffic so the UR socket doesn't die in version 3.1. @@ -124,7 +128,7 @@ void UrCommunication::run() { select(sec_sockfd_ + 1, &readfds, NULL, NULL, &timeout); bytes_read = read(sec_sockfd_, buf, 2048); // usually only up to 1295 bytes if (bytes_read > 0) { - setsockopt(sec_sockfd_, IPPROTO_TCP, TCP_NODELAY, + setsockopt(sec_sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, sizeof(int)); robot_state_->unpack(buf, bytes_read); } else { @@ -143,6 +147,8 @@ void UrCommunication::run() { flag_ = 1; setsockopt(sec_sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, sizeof(int)); + setsockopt(sec_sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, + sizeof(int)); setsockopt(sec_sockfd_, SOL_SOCKET, SO_REUSEADDR, (char *) &flag_, sizeof(int)); fcntl(sec_sockfd_, F_SETFL, O_NONBLOCK); diff --git a/src/ur_realtime_communication.cpp b/src/ur_realtime_communication.cpp index 413b4e6..62724bb 100644 --- a/src/ur_realtime_communication.cpp +++ b/src/ur_realtime_communication.cpp @@ -36,6 +36,7 @@ UrRealtimeCommunication::UrRealtimeCommunication( serv_addr_.sin_port = htons(30003); flag_ = 1; setsockopt(sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, sizeof(int)); + setsockopt(sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, sizeof(int)); setsockopt(sockfd_, SOL_SOCKET, SO_REUSEADDR, (char *) &flag_, sizeof(int)); fcntl(sockfd_, F_SETFL, O_NONBLOCK); connected_ = false; @@ -121,7 +122,7 @@ void UrRealtimeCommunication::run() { select(sockfd_ + 1, &readfds, NULL, NULL, &timeout); bytes_read = read(sockfd_, buf, 2048); if (bytes_read > 0) { - setsockopt(sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, + setsockopt(sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, sizeof(int)); robot_state_->unpack(buf); if (safety_count_ == safety_count_max_) { @@ -143,6 +144,9 @@ void UrRealtimeCommunication::run() { flag_ = 1; setsockopt(sockfd_, IPPROTO_TCP, TCP_NODELAY, (char *) &flag_, sizeof(int)); + setsockopt(sockfd_, IPPROTO_TCP, TCP_QUICKACK, (char *) &flag_, + sizeof(int)); + setsockopt(sockfd_, SOL_SOCKET, SO_REUSEADDR, (char *) &flag_, sizeof(int)); fcntl(sockfd_, F_SETFL, O_NONBLOCK);