diff --git a/client/Socket.php b/client/Socket.php index de2d2c4..9092cf6 100644 --- a/client/Socket.php +++ b/client/Socket.php @@ -3,6 +3,7 @@ abstract class Socket { const RECEIVE_TIMEOUT = 10; + const TCP_CORK = 3; protected $sock; protected $throw_exception_on_timeout; @@ -107,8 +108,10 @@ abstract class Socket { $len = strlen($s); $lens = chr(($len >> 0) & 0xFF) . chr(($len >> 8) & 0xFF) . chr(($len >> 16) & 0xFF) . chr(($len >> 24) & 0xFF); + socket_set_option($this->sock, SOL_TCP, self::TCP_CORK, 1); $this->iterativeSend($lens); $this->iterativeSend($s); + socket_set_option($this->sock, SOL_TCP, self::TCP_CORK, 0); } /* @@ -141,8 +144,7 @@ class IPSocket extends Socket if ($this->sock === FALSE) { throw new Exception("Error creating socket: ".socket_last_error()." ".socket_strerror(socket_last_error())); - } - //socket_set_option($this->sock, SOL_TCP, TCP_NODELAY, 1); + } $this->connected = false; $this->host = $ip; $this->port = $port; diff --git a/client/test_client.php b/client/test_client.php index 59e8a16..17b960f 100644 --- a/client/test_client.php +++ b/client/test_client.php @@ -13,9 +13,9 @@ $log_start = hrtime(true); function logTime($message) { - global $log_start; + /*global $log_start; $current = (hrtime(true) - $log_start) / 1000000.0; - print(sprintf("%.3f", $current)." ".$message."\n"); + print(sprintf("%.3f", $current)." ".$message."\n");*/ } function testSocket($amount, $reconnect, $size) diff --git a/server/SynchronousSocket.cpp b/server/SynchronousSocket.cpp index 3639bf3..1dd01b2 100644 --- a/server/SynchronousSocket.cpp +++ b/server/SynchronousSocket.cpp @@ -1,5 +1,6 @@ #include "SynchronousSocket.h" +#include #include #include #include @@ -162,8 +163,18 @@ void SynchronousSocket::SendMessage(const string & m) { len_s += (char)((len >> (8 * i)) & 0xFF); } + int result = setsockopt(socket, IPPROTO_TCP, TCP_CORK, (char*)&YES, sizeof(int)); + if (result < 0) + { + throw (string)("Error setting socket option"); + } Send(len_s); Send(m); + result = setsockopt(socket, IPPROTO_TCP, TCP_CORK, (char*)&NO, sizeof(int)); + if (result < 0) + { + throw (string)("Error setting socket option"); + } } diff --git a/server/SynchronousSocket.h b/server/SynchronousSocket.h index 6fcaee4..ebe06ad 100644 --- a/server/SynchronousSocket.h +++ b/server/SynchronousSocket.h @@ -10,6 +10,8 @@ class SynchronousSocket private: const int TIMEOUT = 10; // in seconds const int BUFFER_SIZE = 1048576; + const int YES = 1; + const int NO = 0; protected: // собственно сокет int socket; diff --git a/server/log.cpp b/server/log.cpp index 9f0bec0..2ba03df 100644 --- a/server/log.cpp +++ b/server/log.cpp @@ -6,6 +6,7 @@ using namespace std; void LogTime(const string &message) { +#ifdef LOGGING_ENABLED static auto start = chrono::high_resolution_clock::now(); static auto prev = start; auto current = chrono::high_resolution_clock::now(); @@ -13,4 +14,5 @@ void LogTime(const string &message) auto nsec_prev = chrono::duration_cast(current - prev).count(); cerr << (nsec / 1000000.f) << " " << message << " delta " << (nsec_prev / 1000000.0f) << "\n"; prev = current; +#endif } diff --git a/server/tcp_perf_test_server.cpp b/server/tcp_perf_test_server.cpp index 0620798..1912815 100644 --- a/server/tcp_perf_test_server.cpp +++ b/server/tcp_perf_test_server.cpp @@ -97,12 +97,6 @@ void* IPSocketThread(void* arg) cerr << "Error accepting connection, errno = " << errno << "\n"; continue; } - int yes = 1; - int result = setsockopt(recsock, IPPROTO_TCP, TCP_NODELAY, (char*)&yes, sizeof(int)); - if (result < 0) - { - cerr << "Error setting socket option, errno = " << errno << "\n"; - } cout << "Accepted connection from " << inet_ntoa(peeraddr.sin_addr) << ":" << ntohs(peeraddr.sin_port) << "\n"; CreateThread(&ProcessRequests, &recsock); }