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); }