diff --git a/examples/rpc/rpc-server.cpp b/examples/rpc/rpc-server.cpp index 5fc315425..b2bbd7c2f 100644 --- a/examples/rpc/rpc-server.cpp +++ b/examples/rpc/rpc-server.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -92,6 +93,14 @@ int main(int argc, char * argv[]) fprintf(stderr, "Failed to accept client connection\n"); return 1; } + // set TCP_NODELAY to disable Nagle's algorithm + int flag = 1; + int ret = setsockopt(client_socket, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(int)); + if (ret < 0) { + fprintf(stderr, "Failed to set TCP_NODELAY\n"); + close(client_socket); + continue; + } printf("Accepted client connection\n"); rpc_serve_client(backend, client_socket); printf("Client connection closed\n"); diff --git a/ggml-rpc.cpp b/ggml-rpc.cpp index c1c1ffcec..021c4a170 100644 --- a/ggml-rpc.cpp +++ b/ggml-rpc.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -57,6 +58,12 @@ static int socket_connect(const char * host, int port) { if (sock < 0) { return -1; } + // set TCP_NODELAY to disable Nagle's algorithm + int flag = 1; + int ret = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(int)); + if (ret < 0) { + return -1; + } addr.sin_family = AF_INET; addr.sin_port = htons(port); struct hostent * server = gethostbyname(host);