diff --git a/test_anim/matrix_server.cpp b/test_anim/matrix_server.cpp
index ccbe2278ee453f7522dbf1fc4057f1ad5f1cc610..e6d61a248e4941cbcd61361a78d7740c0ddca242 100644
--- a/test_anim/matrix_server.cpp
+++ b/test_anim/matrix_server.cpp
@@ -1,4 +1,5 @@
 // Server side implementation of UDP client-server model
+#include "matrix_server.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -8,7 +9,7 @@
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <stdint.h>
-#include "matrix_server.h"
+#include <fcntl.h>
 
 MatrixServer::MatrixServer()
 {
@@ -18,6 +19,9 @@ MatrixServer::MatrixServer()
         perror("socket creation failed");
         exit(EXIT_FAILURE);
     }
+    int flags = fcntl(sockfd, F_GETFL);
+    flags |= O_NONBLOCK;
+    fcntl(sockfd, F_SETFL, flags);
 
     memset(&servaddr, 0, sizeof(servaddr));
     memset(&cliaddr, 0, sizeof(cliaddr));
@@ -43,11 +47,15 @@ MatrixServer::~MatrixServer()
 
 bool MatrixServer::receive()
 {
-    size_t len = sizeof(cliaddr); //len is value/resuslt
+    size_t len = sizeof(cliaddr); //len is value/result
     datagram_size = recvfrom(sockfd, (char *)buffer, BUFFER_SIZE,
                  MSG_WAITALL, (struct sockaddr *)&cliaddr,
                  &len);
-    buffer[datagram_size] = '\0';
+    if (datagram_size < 0)
+    {
+        // No new data.
+        return false;
+    }
     return parseDatagram(buffer, datagram_size);
 }