C/Visual C - Lectura no bloqueante

   
Vista:

Lectura no bloqueante

Publicado por tipitipi (31 intervenciones) el 08/12/2014 22:31:18
Hola:

Estoy intentando hacer un programilla en C que lea de un socket pero que no lo haga de forma bloqueante, sino que si tras pasado un tiempo desde que se inicia la lectura no hay datos, continue el programa.


He probado con fnctl y ioctl pero no lo consigo.

Alguien me puede ayudar ?

Agradecería un pequeño ejemplo de código

Muchas gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Lectura no bloqueante

Publicado por Tom (481 intervenciones) el 09/12/2014 08:40:19
Hay miles (por no decir millones) de ejemplos por la red.

http://www.kegel.com/dkftpbench/nonblocking.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura no bloqueante

Publicado por tipitipi (31 intervenciones) el 09/12/2014 09:04:35
Hola:


No te lo discuto. El tema está en que he probado varios ejemplos de entre esos millones y no logro que me funcione.

Tengo muy claro que el problema soy yo que no se hacerlo, por ese motivo pido ayuda.

He mirado el link que me has puesto y es más de lo mismo, código que hay que probar ( que supongo que ya he probado, sino ese otro similar ).

Gracias por la respuesta
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura no bloqueante

Publicado por Tom (481 intervenciones) el 09/12/2014 10:05:38
Pues te decides a perder un rato de tu vida y nos cuentas qué has hecho y qué no funciona. A no ser que lo que pretendas sea que alguien te escriba un bonito tutorial que tú luego copies y pegues ...

He encontrado 817.000 tutoriales, ya hechos. Por ejemplo:

http://es.tldp.org/Tutoriales/PROG-SOCKETS/prog-sockets.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura no bloqueante

Publicado por tipitipi (31 intervenciones) el 09/12/2014 10:51:31
Tienes toda la razón del mundo.... pero no me malinterpretes. No pretendía que alguien me haga el trabajo, sino aclarar mi duda.

En un rato pego el ultimo código que he probado y no funciona y seguimos hablando.


Gracias. Seguimos hablando


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura no bloqueante

Publicado por Tom (481 intervenciones) el 09/12/2014 11:24:38
Bueno, me da la impresión por lo que cuentas arriba, que no te has leído la documentación de socket.
Copio y pego de la red:

http://linux.die.net/man/7/socket

Socket options

These socket options can be set by using setsockopt(2) and read with getsockopt(2) with the socket level set to SOL_SOCKET for all sockets:
...
...
SO_RCVTIMEO and SO_SNDTIMEO
Specify the receiving or sending timeouts until reporting an error. The argument is a struct timeval. If an input or output function blocks for this period of time, and data has been sent or received, the return value of that function will be the amount of data transferred; if no data has been transferred and the timeout has been reached then -1 is returned with errno set to EAGAIN or EWOULDBLOCK, or EINPROGRESS (for connect(2)) just as if the socket was specified to be nonblocking. If the timeout is set to zero (the default) then the operation will never timeout. Timeouts only have effect for system calls that perform socket I/O (e.g., read(2), recvmsg(2), send(2), sendmsg(2)); timeouts have no effect for select(2), poll(2), epoll_wait(2), and so on.


Sobre como se usa ... joé, la primera búsqueda en google de SO_RCVTIMEO me ha dado más de 44.000 resultados ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar