/ *
Servidor de escucha EN un puerto.
Listening Server ON A Port.
BY:
POR:
Oscar Medina Duarte
IS111936@mail.udlap.mx
Linux> GCC Server1.c
Solaris> cc server1.c -lxnet -lnsl -lsocket
* /
#include
#include
#include
#include
#define numerodepuerto 6666;
EXTERN INT APAGAR = 0;
Void SignalHD (Int Senal);
Void Protocolo_Control (int);
MAIN () {
Struct sockaddr_in sin, fsin
Int S, SSOCK, ALEN;
CHAR * RCHS;
sin.sin_family = af_INet;
sin.sin_addr.s_addr = htonl (INADDR_Any);
Sin.sin_port = numerodepuerto;
IF ((S = Socket, Sock_Stream, 0)) <0) {
PERROR ("Cant Create Socket");
Exit (1);
}
IF (Bind (S. (Struct SockAddr *) & Sin, SIZEOF SIN <0) {
Perror ("Cant Assign Addres";
EXIT (2);
}
IF (Listen (S, 5) <0) {
Perror ("Cant Turn to Listening Mode";
EXIT (3);
}
Signal (SIGCHLD, SIG_IGN);
Signal (SIGINT, SIGNALHD);
While (1) {
IF (apagar) {
Close (s);
exit (0);
}
Alen = Sizeof (fsin);
IF ((SSOCK = Accept (S, Struct SockAddr *) & fsin, & alen) <0) {
IF (errno == eintr) Continue;
PERROR ("Accept Failed");
EXIT (4);
}
RCHS = (char *) INET_NTOA (fsin.sin_addr);
Printf ("/ NCONEXION from:% S / N", RCHS);
Switch (fork ()) {
Case -1: {
Perror ("forking error");
EXIT (5);
}
Case 0: {
Close (s);
Protocolo_Control (SSOCK);
exit (0);
}
DEFAULT: {
Close (SSOCK);
Break;
}
}
}
}
Void protocolo_control (int descriptor) {
Char buf [4096];
INT CC;
CC = Read (Descriptor, BUF, SIZEOF BUF);
IF (cc> 0) {
Printf ("Readed Data: / N% S / N", BUF);
Write (Descriptor, BUF, Strlen (BUF));
}
}
Void SignalHd (INT SENAL) {IF (Senal == Sigint) {
Printf ("... Interrupt ... / N");
Apagar = 1;
}
}