Programación General > C/C++
Winsock RAW sockets
(1/1)
mathew:
Hola,
Estoy usando RAWSOCKETs para conectar dos programas. EL envio funciona perfectamente, y puedo ver los paquetes que llegan a la maquina destino, pero esta no captura ningun paquete, se queda en la funcion recvfrom() bloqueada e ignorando todos los paquetes que llegan....
El codigo es mas o menos:
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
...
se.sin_family = AF_INET;
se.sin_addr.s_addr = htonl(INADDR_ANY);
se.sin_port = 0;
if ( bind(s, (struct sockaddr *) &se, seSize) <0)
printf("Error bindingn");
.....
iReceivedLen = recvfrom(s, buf, receivesize, 0, (struct sockaddr *)&se, &seSize);
No se si tengo que hacer algo mas... recvfrom() simplemente se bloquea como si ningun paquete llegase.
Tambien he intentado WSAIoctl -SIO_RCVALL aunque siempre tengo un error 10022.
POR FAVOR necesito ayuda!!! Gracias
punteroNULO:
puede que el fallo este en:
--- Código: C ---se.sin_port = 0; puesto que no le indicas en que puerto tiene que escuchar, sino que escoga uno libre cualquiera.
lo lógico es especficar un puerto. Por ejemplo:
--- Código: C --- se.sin_port = htons(26000); y luego enviar los mensajes a ese puerto.
mathew:
Gracias por tu respuesta.
He estado probando eso tambien y parece que no es el problema.... Ademas que como uso directamente IP no deberia necesitar ningun puerto... y el emisor no esta enviando los paquetes a ningun puerto especifico...
Alguna sugerencia??
punteroNULO:
Si no quieres recibir por un puerto en concreto sino capturar todo lo que se recibe creo que debería quitar la función bind.
Prueba a comentar ese trozo de código a ver si funciona.
mathew:
--- Cita de: "punteroNULO" ---Si no quieres recibir por un puerto en concreto sino capturar todo lo que se recibe creo que debería quitar la función bind.
Prueba a comentar ese trozo de código a ver si funciona.
--- Fin de la cita ---
Mmm... no. Sin el bind() sigue sin recibir nada : (
Quiza el truco este en el propio bind, pero lo he configurado de 1000 maneras sin exito... realmente estoy atascado.
Navegación
Ir a la versión completa