Trokan.c Ayuda Windows C

Iniciado por Garfield07, 2 Septiembre 2010, 16:26 PM

0 Miembros y 1 Visitante están viendo este tema.

Garfield07

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


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

clodan

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

bizco

#2
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.

Garfield07

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


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

Eternal Idol

while (1) es un bucle infinito, mejor usar for (;; ) aunque los compiladores modernos no emitan la comparacion redundante con el 1.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

clodan

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