Skip to content
Snippets Groups Projects
Commit 4c8af8a9 authored by ftomi's avatar ftomi
Browse files

Matrix server non-block

parent 279fe388
No related branches found
No related tags found
No related merge requests found
// 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);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment