Buenas:
Tengo una aplicación que escucha un puerto UDP por un puerto (digamos que 10000) y que envia los datos tratados por otro puerto TCP digamos el 10001.
Son Sockets non-blocking. Uso el FD_SET y el select para saber si tienen datos de entrada o salida para enviar y recibir.
Todo funciona correctamente, pero cuando finalizo las conexiones, al intentar reabrir de nuevo, me encuentro con problemas.
El socket TCP se queda en un estado en el que nunca tiene forma de escribir y siempre lee 0 bytes.
El select siempre me da como que tiene para leer, pero no para escribir.
Si hago netstat -ano en el equipo, me encuentro que los sockets no han sido eliminados sino que estan en TIME_WAIT y encima hay multiples sockets conectados de la misma forma.
el finalizado del socket lo hago con
shutdown()
y luego
closesocket()
son sockets en WIN32.
int W32SOCKET_TCP::Close()
{
this->State=GSOCKET::STATE::KILLING;
shutdown(this->ID,2);
return closesocket(this->ID); //ID es el identificador de SOCKET
}
que estoy haciendo mal? por que no se finalizan los sockets para que pueda volverlos a abrir?
PD: no estoy usando multitarea. Uso una función Poll para enviar y recibir segun el estado del select.
gracias!