• Miércoles 20 de Noviembre de 2024, 18:25

Autor Tema:  sockets posix, send y recv devuelven -1  (Leído 1612 veces)

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
sockets posix, send y recv devuelven -1
« en: Miércoles 15 de Septiembre de 2010, 13:58 »
0
Buenas

Tengo un pequeño problemita en una aplicacion que estoy haciendo, y la verdad no entiendo por que.
Haber si alguien que maneje un poco mas este tema me puede dar una mano.

Estoy creando una coneccion por sockets entre un cliente y un servidor, algo asi:

Código: C++
  1.  
  2. struct sockaddr_in dir;
  3. int des;
  4.  
  5. dir.sin_addr.s_addr = inet_addr(127.0.0.1);
  6. dir.sin_port = htons(32000);
  7. dir.sin_family = AF_INET;
  8. memset((char *)&(dir.sin_zero), 0, 8);
  9.  
  10. des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  11.  
  12. bind(des, (struct sockaddr *)&dir, sizeof(dir));
  13.  
  14. listen(des, 10);
  15.  
  16.  

Despues hago el accept() y llamo a recv() dentro de un bucle.

La coneccion entre el servidor y el cliente se establece sin problemas.
Pero a la hora de anviar datos, tanto el recv() del server como el send() del cliente me devuelven -1.

Supuestamente todas las funcionces de la libreria socket guardan en errno el valor del ultimo error que se produjo.
Me fije cual era el valor despues de llamar a las funciones y es 0. Lo que no tiene sentido.

El problema en realidad es que necesito usar las funciones para conocer el estado de la coneccion.

Alguien tiene idea si hay algun error al crear el socket, o si es un tema de configuracion?

EDITO:

Me olvide de decir que el envio de datos se produce sin ningun problema. O sea que supuestemente el valor de retorno de send() y recv() deberia ser la cantidad de byter enviaods/recividos.


Muchas gracias de antemano.
Saludos
The sweet smell of a great sorrow lies over the land.


diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: sockets posix, send y recv devuelven -1
« Respuesta #1 en: Miércoles 22 de Septiembre de 2010, 20:23 »
0
has comprobado el error que te devuelve?

si los sockets los has definido como non-blocking, siempre que haces una accion con ellos (recv, send, recvfrom...) retornan inmediatamente con un error y ponen como error

WSA_SHOULDBLOCK

que indica que el socket ha finalizado por ser no bloqueante, pero el proceso se realiza igualmente de forma no secuencial (tal y como explicas).

mira a ver si tienes algo como ioctl o algo asi cambiando el comportamiento del socket.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: sockets posix, send y recv devuelven -1
« Respuesta #2 en: Martes 28 de Septiembre de 2010, 04:06 »
0
Buenas.

No, nada de eso, mis sockets son normalitos :P

Son bloqueantes, anda todo perfecto, salvo el valor de retorno.
Como dije en el post anterior, me fijo el valor de errno despues del llamado a funcion y este es 0, eso es lo que me resulta mas extraño.

Saludos.
The sweet smell of a great sorrow lies over the land.