diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2016-09-21 19:29:39 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2016-09-21 19:29:39 (GMT) |
commit | b6afbe8c699ae76443628badae33beee9934c6bc (patch) | |
tree | 69878624d3ae529314a9824f0c0ceca8bca617b7 /src/common/net.c | |
parent | 291968f4f4a5e85f6963813a43f2176320fb8d49 (diff) |
Provided a real welcome panel at startup, with tricks and actions.
Diffstat (limited to 'src/common/net.c')
-rw-r--r-- | src/common/net.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/common/net.c b/src/common/net.c index aba5ba2..b741883 100644 --- a/src/common/net.c +++ b/src/common/net.c @@ -24,6 +24,7 @@ #include "net.h" +#include <errno.h> #include <stdio.h> #include <string.h> #include <unistd.h> @@ -100,3 +101,59 @@ int connect_via_tcp(const char *server, const char *port, struct sockaddr_in *ad return result; } + + +/****************************************************************************** +* * +* Paramètres : sock = nom ou adresse du serveur à contacter. * +* buffer = tampon pour la réception des données. [OUT] * +* max = taille prévue pour ce tampon. * +* len = quantité de données effectivement reçues. [OUT] * +* * +* Description : Reçoit du réseau autant de données que possible. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool recv_all(int sock, char *buffer, size_t max, size_t *len) +{ + bool result; /* Bilan global à retourner */ + ssize_t ret; /* Bilan d'un appel */ + + result = true; + + buffer[0] = '\0'; + max--; /* '\0' final */ + *len = 0; + + do + { + ret = recv(sock, buffer + *len, max, *len > 0 ? MSG_DONTWAIT : 0); + + printf("ret = %zd\n", ret); + + if (ret == -1 && *len == 0) + { + if (errno == EAGAIN || errno == EWOULDBLOCK) + continue; + else + result = false; + } + + else if (ret > 0) + { + max -= ret; + *len += ret; + } + + } + while (ret > 0); + + buffer[*len] = '\0'; + + return result; + +} |