elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Comunicaciones
| |-+  Dispositivos Móviles (PDA's, Smartphones, Tablets)
| | |-+  Hacking Mobile
| | | |-+  Socket en espera
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Socket en espera  (Leído 6,558 veces)
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Socket en espera
« en: 21 Abril 2009, 23:06 pm »

Programando un pequeño programa en C me encontré con el problema de dejar un socket en "modo espera" para recibir datos. Alguien podria ayudarme? :-[
Gracias :-*


En línea

Crack the bytes, crack yourself
SirGraham


Desconectado Desconectado

Mensajes: 492



Ver Perfil WWW
Re: Socket en espera
« Respuesta #1 en: 22 Abril 2009, 00:19 am »

Hola,

Lo mas lógico es usar un Bucle y en caso de no hacerlo "blockeante" (que supongo sera tu pregunta) es usar un thread (hilo) ....

Si nos comentas mas lo que quieres hacer....


Saludos,
Sir Graham.


« Última modificación: 22 Abril 2009, 09:09 am por SirGraham » En línea

   
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: Socket en espera
« Respuesta #2 en: 22 Abril 2009, 15:50 pm »

Lo que me refiero es dejar el bucle en modo escucha, perdon por la confusion :-[ Para entendernos (no me riñas por la definicion, es para que te quede claro): una especie de hook que haga tal accion (esto no hace falta que me digas como :P) cuando, a traves de un socket, se reciban datos (texto o archivo).
« Última modificación: 22 Abril 2009, 15:53 pm por Lewert » En línea

Crack the bytes, crack yourself
SirGraham


Desconectado Desconectado

Mensajes: 492



Ver Perfil WWW
Re: Socket en espera
« Respuesta #3 en: 22 Abril 2009, 20:27 pm »

Hola,

uhmmm... yo no he visto gestión "de Hooks" en las librerías de Socket: Poner una función de callback para eventos del tema.  Puedes en algunos sistemas operativos como el "ventanuco" interceptar el servicio de Winsock con un hook y controlar todos los sockets que se abren...

En el caso de un uso "normal": esto es controlar tus sockects desde tu propia aplicación, lo único que en teoría puedes hacer es un hilo de proceso a parte (un thread) que este testando si ha llegado información al socket. Para eso lo mas practico (que no indispensable) es hacer al socket "no bloqueante" y así puedes realizar las operaciones sin problemas...

¿Eso es lo que preguntas?

Saludos,
Sir Graham.
En línea

   
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: Socket en espera
« Respuesta #4 en: 22 Abril 2009, 20:52 pm »

uhmmm... yo no he visto gestión "de Hooks" en las librerías de Socket: Poner una función de callback para eventos del tema.  Puedes en algunos sistemas operativos como el "ventanuco" interceptar el servicio de Winsock con un hook y controlar todos los sockets que se abren...
Lo de hooks era para que te hicieses una idea

En el caso de un uso "normal": esto es controlar tus sockects desde tu propia aplicación, lo único que en teoría puedes hacer es un hilo de proceso a parte (un thread) que este testando si ha llegado información al socket. Para eso lo mas practico (que no indispensable) es hacer al socket "no bloqueante" y así puedes realizar las operaciones sin problemas...
Sí que es esto lo que quiero decir, lo que no entiendo es lo de hacer el socket "no bloqueante" :-\ No he oido nunca eso...
En línea

Crack the bytes, crack yourself
toxeek
The "Tricky" ..
Colaborador
***
Desconectado Desconectado

Mensajes: 1.637


Ver Perfil
Re: Socket en espera
« Respuesta #5 en: 22 Abril 2009, 21:04 pm »

Que tal.

Resulta que hay syscalls como accept() que "bloquean". O sea, hasta que no le llega datos esta "bloqueando" y no se dara ninguna otra accion ya que esta el jodido accept() bloqueando /* read() tambien bloquea */

Para hacerlo "non-blocking" puedes hacer 2 cosas:

- una y menos "efectiva" seria usando la cabecera fcntl.h, y con la funcion fcnt() poner el socket ( descriptor ) en modo non-blocking. Creo que podria ser algo asi:

...
#include <fcntl.h>
...
int sock;
...

fcntl(sock, F_SETFL, O_NONBLOCK);

mirate en Google como poner el socket en modo non-blocking con fcntl().

- Otra y mas efectiva es usando select(). Linux-> man select
o Googlea.



Suerte.

  /**** MODIFIKO ****/

En realidad no se si es esto lo que necesitas, porque a mi parecer no has explicado bien cual es la verdadera raiz de tu problema.
« Última modificación: 22 Abril 2009, 21:06 pm por averno » En línea

"La envidia es una declaración de inferioridad"
Napoleón.
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: Socket en espera
« Respuesta #6 en: 22 Abril 2009, 21:55 pm »

Veamos, voy a intentar explicarlo un poco mejor.
En cualquier programa en Visual Basic con sockets existen los eventos "Data_Arrival", "Close", "Connect", "Accept", etc.. y dentro de cada evento escribes la funcion para cada caso. Por ejemplo, puedo programar para que cada vez que lleguen datos ("Data_Arrival"), la variable ExistenDatos pase a ser True.
Pues me gustaria hacer lo mismo en C con los sockets bluetooth :P
Alguna ayuda? :silbar:
En línea

Crack the bytes, crack yourself
SirGraham


Desconectado Desconectado

Mensajes: 492



Ver Perfil WWW
Re: Socket en espera
« Respuesta #7 en: 22 Abril 2009, 23:15 pm »

Hola,

Pues lo que te ha comentado averno.....  Esas funciones son perfectamente validas para los sockets que se usan en linux en BlueZ y en C/C++.

Aunque nosotros usamos las dos formas que comenta.

Con fcntl declaras no bloqueante.... y con el select puedes saber si el socket es esta preparado no para recibir datos... Todo esto metido en un thread....

No existen Callbacks que te "llamen" cuando se producen eventos en los sockets... tienes que estar tu comprobando constantemente el tema. Por eso el uso de threads...

Visual Basic (agggghhggggg!!!! que escalofrio me recorre la espalda)....

El VB te lo da todo echo. Pero el problema de eso es que si no tiene lo que necesitas, no puedes implementarlo "a parte".
En C/C++ lo tienes que hacer tu, pero tienes todo el control...

Aprender con Visual Basic a programar muchas veces puede ser un grave error...  :silbar: Te encubre todo el funcionamiento natural de las cosas...

La "gente adulta" programa con cosas serias como C, C++, Java... no "Visual Basic" (es una opinion personal  :P)

Saludos,
Sir Graham.
« Última modificación: 22 Abril 2009, 23:18 pm por SirGraham » En línea

   
Lewert

Desconectado Desconectado

Mensajes: 231



Ver Perfil
Re: Socket en espera
« Respuesta #8 en: 23 Abril 2009, 14:55 pm »

Muchisimas gracias por las respuestas :P
Fuera del tema.. ya se que no existen hooks (o callbacks) que hagan eso, era para que os hicierais una idea :P
Tambien ya se que VB te limita mucho, pero no sabia explicar lo de los eventos de otra forma :xD
Gracias de nuevo ;D
En línea

Crack the bytes, crack yourself
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
MUbypass v 1.0 (saltate los 45 seg. de espera de Megaupload)
Software
kj_ 0 1,799 Último mensaje 23 Diciembre 2010, 22:01 pm
por kj_
¡Espera! No compres estos teléfonos
Noticias
wolfbcn 0 1,228 Último mensaje 5 Diciembre 2016, 21:32 pm
por wolfbcn
El futuro que nos espera....
Mac OS X
DamnSystem 0 1,848 Último mensaje 29 Diciembre 2016, 12:13 pm
por DamnSystem
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines