|
@@ -5,10 +5,17 @@
|
|
* Created on 14 novembre 2018
|
|
* Created on 14 novembre 2018
|
|
*/
|
|
*/
|
|
|
|
|
|
|
|
+#include <stdlib.h>
|
|
|
|
+#include <stdio.h>
|
|
|
|
+#include <unistd.h>
|
|
|
|
+#include <string.h>
|
|
#include "error.h"
|
|
#include "error.h"
|
|
#include "server.h"
|
|
#include "server.h"
|
|
|
|
|
|
-/* --- Fonctions privées --- */
|
|
|
|
|
|
+/* --- Extern --- */
|
|
|
|
+extern int serrno;
|
|
|
|
+
|
|
|
|
+/* --- Fonctions privées --- */
|
|
void server_bind_tcp(Server this, int port) {
|
|
void server_bind_tcp(Server this, int port) {
|
|
/* Declaration variable */
|
|
/* Declaration variable */
|
|
int tmp;
|
|
int tmp;
|
|
@@ -20,14 +27,16 @@ void server_bind_tcp(Server this, int port) {
|
|
tmp = bind(this->socket, (struct sockaddr*) &this->serv, sizeof (struct sockaddr_in));
|
|
tmp = bind(this->socket, (struct sockaddr*) &this->serv, sizeof (struct sockaddr_in));
|
|
if (tmp == ERR) {
|
|
if (tmp == ERR) {
|
|
free(this);
|
|
free(this);
|
|
- neterror(BIND_ERROR)
|
|
|
|
|
|
+ serrno = SEBIND;
|
|
|
|
+ addperror("Impossible de bind la socket");
|
|
}
|
|
}
|
|
|
|
|
|
/* Listen */
|
|
/* Listen */
|
|
tmp = listen(this->socket, SOMAXCONN);
|
|
tmp = listen(this->socket, SOMAXCONN);
|
|
if (tmp == ERR) {
|
|
if (tmp == ERR) {
|
|
free(this);
|
|
free(this);
|
|
- neterror(BIND_ERROR)
|
|
|
|
|
|
+ serrno = SEBIND;
|
|
|
|
+ addperror("Impossible d'ecouter");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -35,18 +44,20 @@ void server_accept_tcp(Server this) {
|
|
/* Accept */
|
|
/* Accept */
|
|
this->socket_client = accept(this->socket, NULL, NULL);
|
|
this->socket_client = accept(this->socket, NULL, NULL);
|
|
if (this->socket_client == ERR) {
|
|
if (this->socket_client == ERR) {
|
|
- free(this);
|
|
|
|
- syserror("Erreur lors de la demande de connexion ", 3)
|
|
|
|
|
|
+ serrno = SEACCEPT;
|
|
|
|
+ addperror("Impossible d'accepter");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
ssize_t server_receive_tcp(Server this, char* buf, size_t size) {
|
|
ssize_t server_receive_tcp(Server this, char* buf, size_t size) {
|
|
int tmp;
|
|
int tmp;
|
|
/* Lecture message */
|
|
/* Lecture message */
|
|
|
|
+ memset(buf, 0, size);
|
|
tmp = read(this->socket_client, buf, size);
|
|
tmp = read(this->socket_client, buf, size);
|
|
if (tmp == ERR) {
|
|
if (tmp == ERR) {
|
|
- free(this);
|
|
|
|
- syserror("Erreur lors de la reception ", 3)
|
|
|
|
|
|
+ serrno = SERECEIVE;
|
|
|
|
+ addperror("Impossible de récupèrer les données");
|
|
|
|
+ return ERR;
|
|
}
|
|
}
|
|
return tmp;
|
|
return tmp;
|
|
}
|
|
}
|
|
@@ -56,8 +67,8 @@ void server_send_tcp(Server this, char* msg) {
|
|
/* Envoi message */
|
|
/* Envoi message */
|
|
tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
|
|
tmp = write(this->socket_client, msg, strlen(msg) * sizeof (char));
|
|
if (tmp == ERR) {
|
|
if (tmp == ERR) {
|
|
- free(this);
|
|
|
|
- syserror("Erreur lors de l'envoi ", 3)
|
|
|
|
|
|
+ serrno = SESEND;
|
|
|
|
+ addperror("Impossible d'envoyer les données");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -72,7 +83,9 @@ Server server_create_tcp() {
|
|
this->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
|
this->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
|
if (this->socket == ERR) {
|
|
if (this->socket == ERR) {
|
|
free(this);
|
|
free(this);
|
|
- neterror(SOCKET_ERROR)
|
|
|
|
|
|
+ serrno = SESOCKET;
|
|
|
|
+ addperror("Impossible de créer la socket");
|
|
|
|
+ return NULL;
|
|
}
|
|
}
|
|
this->addr = sizeof (struct sockaddr_in);
|
|
this->addr = sizeof (struct sockaddr_in);
|
|
memset(&this->serv, 0, sizeof (struct sockaddr_in));
|
|
memset(&this->serv, 0, sizeof (struct sockaddr_in));
|
|
@@ -82,7 +95,9 @@ Server server_create_tcp() {
|
|
tmp = setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof (option));
|
|
tmp = setsockopt(this->socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof (option));
|
|
if (tmp == -1) {
|
|
if (tmp == -1) {
|
|
free(this);
|
|
free(this);
|
|
- neterror(SOCKET_ERROR)
|
|
|
|
|
|
+ serrno = SESOCKET;
|
|
|
|
+ addperror("Impossible de modifier les options de la socket");
|
|
|
|
+ return NULL;
|
|
}
|
|
}
|
|
|
|
|
|
/* Lien fonctions */
|
|
/* Lien fonctions */
|
|
@@ -99,18 +114,14 @@ Server server_create_tcp() {
|
|
}
|
|
}
|
|
|
|
|
|
void server_close_client(Server this) {
|
|
void server_close_client(Server this) {
|
|
- /* Declaration variable */
|
|
|
|
- int tmp;
|
|
|
|
-
|
|
|
|
/* Que pour TCP */
|
|
/* Que pour TCP */
|
|
if (this->type != SERV_TCP) {
|
|
if (this->type != SERV_TCP) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/* Ferme */
|
|
/* Ferme */
|
|
- tmp = close(this->socket_client);
|
|
|
|
- if (tmp == ERR) {
|
|
|
|
- free(this);
|
|
|
|
- syserror("Erreur lors de la fermeture de la socket ", 3)
|
|
|
|
|
|
+ if (close(this->socket_client) == ERR) {
|
|
|
|
+ serrno = SECLOSE;
|
|
|
|
+ addperror("Impossible de fermer la socket");
|
|
}
|
|
}
|
|
}
|
|
}
|