#include "server.h" int DROP_TCP_SERVER(const int pPort, int* pListenSock){ if( DEBUGMOD&HDR ) printf("====== DROP_TCP_SERVER(%d, %p) ======\n\n", pPort, (void*) pListenSock); /* [0] Initialisation des variables =========================================================*/ static struct sockaddr_in addr; // contiendra les infos du serveur int STATUS; // status struct timeval timeout; *pListenSock = -1; /* [1] Création de la socket =======================================================*/ /* 1. Création socket */ *pListenSock = socket(AF_INET, SOCK_STREAM, 0); if( DEBUGMOD&SCK && DEBUGMOD&HDR ) printf(" * [drop_tcp_server] socket: %d\n", *pListenSock); /* 2. Gestion erreur */ if( *pListenSock < 0 ) return -1; /* 3. Timeout */ timeout.tv_sec = SOCK_TIMEOUT; timeout.tv_usec = 0; if( setsockopt(*pListenSock, SOL_SOCKET, SO_RCVTIMEO|SO_SNDTIMEO, (char*) &timeout, sizeof(struct timeval) ) < 0 ){ close(*pListenSock); return -1; } /* [2] On définit les infos de la socket =========================================================*/ /* (1) Reset des valeurs */ bzero(&addr, sizeof(struct sockaddr_in)); /* (2) On définit les infos */ addr.sin_family = AF_INET; addr.sin_port = htons(pPort); addr.sin_addr.s_addr = htonl(INADDR_ANY); /* [3] On publie la SOCKET =======================================================*/ /* 1. Publication socket */ STATUS = bind(*pListenSock, (struct sockaddr*) &addr, sizeof(addr)); if( DEBUGMOD&SCK && DEBUGMOD&HDR ) printf(" * [drop_tcp_server] bind: %d\n", STATUS); /* 2. Gestion erreur */ if( STATUS < 0 ) return -1; /* [4] On met la socket sur écoute =======================================================*/ /* 1. Démarrage écoute */ STATUS = listen(*pListenSock, MAX_TCP_THR); if( DEBUGMOD&SCK && DEBUGMOD&HDR ) printf(" * [drop_tcp_server] listen: %d\n", STATUS); /* 2. Gestion erreur */ if( STATUS < 0 ) return -1; /* [n] Code succès =========================================================*/ return 0; }