Hola a todos:

Estoy teniendo un problema con los sockets de c bajo linux.
Estoy haciendo un servidor tcp y cuando bindeo y escucho un puerto por
primera vez todo anda bien. Pero cuando cierro el programa y lo
vuelvo a abrir no puedo hacer el listen sobre el puerto.

Estoy cerrando el socket y todo, pero el error sigue apareciendo, alguna
idea?

les dejo el codigo del server:

void Socket::listen(unsigned port, unsigned cantidadEspera) {
    if (!valido) {
        valido = false;
        struct sockaddr_in miDireccion;
        fd = 0;

        if((fd = ::socket(AF_INET, SOCK_STREAM, 0)) == INVALIDO)
            valido = false;
        else {
            miDireccion.sin_family = AF_INET;
            miDireccion.sin_port = htons(port);
            miDireccion.sin_addr.s_addr = INADDR_ANY;
            bzero(&(miDireccion.sin_zero), 8);

            if (bind(fd, (struct sockaddr*) &miDireccion, sizeof(struct
sockaddr)) == INVALIDO)
                valido = false;
            else
                valido = ::listen(fd, cantidadEspera) != INVALIDO;
        }
    }
}

y desde el close hago:

void Socket::close() {
    ::close(fd);
    valido=false;
}

Muchas gracias,
Mauro.
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion

Responder a