Buenas, estoy programando un mini-server en C, que en Linux he desarrollado bastante mejor, pero necesito en Windows.
He escrito este code para ir mejorandolo, pero "algo" hace que se salte el accept y aunque nadie se conecte salta al siguiente paso xD.
El code:
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main ()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData);
struct sockaddr_in host, client;
int a=sizeof (struct sockaddr);
SOCKET newsock;
SOCKET sockfd=socket (2, 1, 0);
host.sin_family=AF_INET;
host.sin_addr.s_addr=0;
host.sin_port=htons (31337);
memset (host.sin_zero, 0, 8);
bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr*));
listen (sockfd, 1);
while (1)
{
newsock=accept (sockfd, (struct sockaddr*)&client, &a);
send (newsock, "Hola!\n", 6, 0);
printf ("Conex. correcta.\n");
closesocket (newsock);
}
closesocket (sockfd);
return 0;
}
Qué falla??? Como ven sale infinitamente el printf!!! Y nadie se conecta!!! Y no te puedes conectar!!!
Saludos y gracias
Saludos
mira, puede ser que siga asi porqe entra al while y no lo comparas con nada
osea pones while 1... while 1 que? entendes?
osea si pones while tenes qe poner una condicion, onda while (x<1){} y cosas asi, sino va a seguir repitiendose
no verificas en ningun caso el resultado de las funciones anteriores NECESARIAS para que puedas aceptar conexion alguna. revisa que el fallo esta antes de accept, el tercer parametro de bind no es correcto.
Clodan, no es necesario poner nada mas que un uno porque el computer luego lo pasa a ensamblador y ahi lo que queda es hacer la operacion entre parentesis, si la hay y si el resultado es positivo, o sea, diferente de cero, hace lo que viene entre las llaves.
Hay que ver como de grande es un code con una sola instruccion WHILE!!!
Ya he visto el fallillo xD no es un puntero. Voy a provarlo ahora mismo. Muxas gracias ctlon. Eso normalmente lo hago despues, pero ya ves xD. Lo hago asi para que mientras escribo el code no sea largo, pero va a ser que no!!!
Saludos y gracias a los dos
while (1) es un bucle infinito, mejor usar for (;; ) aunque los compiladores modernos no emitan la comparacion redundante con el 1.
Cita de: Eternal Idol en 3 Septiembre 2010, 14:41 PM
while (1) es un bucle infinito, mejor usar for (;; ) aunque los compiladores modernos no emitan la comparacion redundante con el 1.
Lo mismo me parecio a mi, pero me dijo esto:
jjajaja yo no entiendo mucho todavia asi que lo acepte con sabiduria jejeje
Cita de: Sagrini en 3 Septiembre 2010, 11:30 AM
Clodan, no es necesario poner nada mas que un uno porque el computer luego lo pasa a ensamblador y ahi lo que queda es hacer la operacion entre parentesis, si la hay y si el resultado es positivo, o sea, diferente de cero, hace lo que viene entre las llaves.
Hay que ver como de grande es un code con una sola instruccion WHILE!!!
Ya he visto el fallillo xD no es un puntero. Voy a provarlo ahora mismo. Muxas gracias ctlon. Eso normalmente lo hago despues, pero ya ves xD. Lo hago asi para que mientras escribo el code no sea largo, pero va a ser que no!!!
Saludos y gracias a los dos