Mmm, lo he reescrito para la Wiki...
http://wiki.elhacker.net/programacion/cc/articulos/introducion-a-los-sockets-en-ansi-c
Un saludo!
Se ve muy lindo e interesante, pero poner el código como código, para que se vea :P porfa..
SAludos
Jeje gracias...
El code esta mejor en el .doc, aunque aqui mismo te dejo el original, en GeSHi...
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>
int socketfd, newsocket;
char *filename;
void shutup (int signal)
{
FILE *log;
log=fopen (filename, "a+");
times ();
printf ("Shutting down...\n\n");
fprintf (log, "Shutting down...\n\n");
fclose (log);
close (newsocket);
close (socketfd);
exit (0);
}
int times ()
{
FILE *log;
time_t now=time (0);
struct tm *ahora;
char buffer [40];
ahora=localtime ((const time_t*)&now);
strftime (buffer, 40, "%d/%m/%Y %H:%M:%S" , ahora);
log=fopen (filename, "a+");
printf ("%s ", buffer);
fprintf (log,"%s ", buffer);
fclose (log);
return 0;
}
int main (int argc, char *argv [])
{
time_t now=time (0);
struct tm *ahora;
char hora [40];
ahora=localtime ((const time_t*)&now);
strftime (hora, 40, "%d/%m/%Y %H:%M:%S" , ahora);
printf ("SmallServ 2.0 - By Sagrini - Sagrini 2010 - %s\n", hora);
if (getuid()!=0)
{
printf ("This proccess must be run by root.\n\n");
return 1;
}
if (argc<3)
{
printf ("Use: %s <PORT> <LOG> [MODE]\nMode:\t\t0) Fork the proccess to background [DEFAULT].\n\t\t1) Run in the terminal.\n\n", argv [0]);
return 1;
}
int cont;
FILE *log;
struct sockaddr_in client, host;
char buffer [1024];
int size=sizeof (client);
filename = argv [2];
socketfd=socket (2, 1 , 0);
host.sin_family=AF_INET;
host.sin_port=htons (atoi (argv [1]));
host.sin_addr.s_addr=0;
bind (socketfd, (struct sockaddr*)&host, sizeof (struct sockaddr));
listen (socketfd, 3);
log=fopen (filename, "a+");
times ();
if (argv [3] != NULL && atoi (argv [3]) == 1)
printf ("\nStarting up...\n\n");
fprintf (log, "Starting up...\n\n");
fclose (log);
signal (SIGTERM, shutup);
signal (SIGINT, shutup);
if (argv [3] == NULL || atoi (argv [3]) == 0)
daemon (1, 0);
while (1)
{
newsocket=accept (socketfd, (struct sockaddr*)&client, &size);
log=fopen (filename, "a+");
times ();
printf ("Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fprintf (log, "Got connection from %s:%d\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fclose (log);
cont=recv (newsocket, &buffer, 1024, 0);
while (cont>2)
{
printf ("%d", cont);
log=fopen (filename, "a+");
times ();
buffer [cont-1]='\0';
printf ("RECV %d bytes: %s ", cont-2, buffer);
fprintf (log, "RECV %d bytes: %s\n", cont-2, buffer);
fclose (log);
cont=recv (newsocket, &buffer, 1024, 0);
}
log=fopen (filename, "a+");
times ();
printf ("Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fprintf (log, "Finishing connection from %s:%d\n\n", inet_ntoa (client.sin_addr), ntohs (client.sin_port));
fclose (log);
close (newsocket);
}
close (socketfd);
return 0;
}
Este corresponde al 3.0. El 2.0 es el mismo pero con menos cosas. El 4.0 es el mismo para Windows...
Sagrini modifica el primero y quedara pro , gracias por ela porte
Modificado! ya esta creo que se ve mejor... Descargaros el .doc, es mas facil no? Nop, no tiene macros.... no se ni crearlas ;)
Cita de: Sagrini en 19 Enero 2011, 18:18 PM
Modificado! ya esta creo que se ve mejor... Descargaros el .doc, es mas facil no? Nop, no tiene macros.... no se ni crearlas ;)
Muy bueno, toda la info que se encuentra sobre el tema esta en ingles, y para los que estamos peleados con ese idioma, o entendemos poco, se nos complica, gracias por tu aporte..
SAludos
Bueno, le he escrito a Littlehorse para que lo mire, aun nada :-[ lo voy a pedir como post interesante o algo, o no llega a tanto? Realmente yo para escribir soy un poco cafre, pero... Gracias!
No hace falta pedir nada. Pueden poner sus posts en este hilo (https://foro.elhacker.net/programacion_cc/recopilatorio_temas_importantes_de_programacion_cc-t174285.0.html) y ya queda en el recopilatorio. En el caso de los sources interesantes, es lo mismo, pueden postearlos aqui (https://foro.elhacker.net/programacion_cc/recopilatorio_sources_interesantes-t298479.0.html) y yo luego los agrego a la lista principal.
Cita de: Sagrini en 19 Enero 2011, 19:00 PM
Bueno, le he escrito a Littlehorse para que lo mire, aun nada :-[
Claramente "aun nada", estaría bien que tengas un poco de paciencia, ten en cuenta que todos tenemos una vida y nuestras cosas que hacer; no podemos estar 24hs pendientes del foro. Me enviaste el pm a las
19:00:34 e hiciste el post citado a las
19:00:58, es decir, no esperaste mas de 24 segundos.
En cuanto al post, no lo he leído todo. Trata de formatearlo un poco mejor para que sea mas legible, comenzando por quitar el contenido completo de la etiqueta quote y code y colocar los espacios correctamente.
Y por cierto, no se pueden poner direcciones de correo en los posts.
Saludos
Bueno Littlehorse perdona lo que pasa es que hice un copy-paste del mensaje porque tecnicamente lo habia escrito con el nombre de E.I. pero el recibio ese dia bastantes mensajes y el mio cayo en el olvido. Asi que te escribi a ti y puse el mensaje directamente. Espero que no te lo tomes a mal, se me habia ido...
Ya he colgado el post. Perdonad por las molestias :-\ lo siento....
PD: Gracias LH por lo del email habia copiado directamente el texto del .doc y no me habia dado cuenta que llevaba mi e-mail. Luego he ido mejorando el code, metiendole los "code"...