Autor Tema: Sockets en Linux y Windows  (Leído 5925 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Zeratul

  • *
  • Mensajes: 43
  • Liked: 0
Sockets en Linux y Windows
« : enero 18, 2010, 06:55:53 pm »
Hola a todos, tengo una gran duda, tengo una apliacion en Windows que utiliza sockets, si yo tengo un codigo algo asi

int miSock = (int)socket(family, type, protocol);
        struct timeval tv;
   fd_set fds;
   
   FD_ZERO(&fds);
   FD_SET(miSock, &fds);
   tv.tv_sec = 0;
   tv.tv_usec = 0;
   int ret = select(miSock + 1, &fds, NULL, NULL, &tv);

En windows ret=0 y en linux ret=1, alguien sabe por que la diferencia y como hacer para que funcione en linux de la misma forma que en windows???


nitr0us

  • ***
  • Mensajes: 359
  • Liked: 101
  • #rm -fr /
    • http://www.brainoverflow.org
Re: Sockets en Linux y Windows
« Respuesta #1 : agosto 11, 2010, 04:31:27 pm »
Tiene rato no programo sockets, pero... Siempre me funcionó select() y solamente verificaba si valor devuelto es -1 (error).
Cita
Return Value
On success, select() and pselect() return the number of file descriptors contained in the three returned descriptor sets (that is, the total number of bits that are set in readfds, writefds, exceptfds) which may be zero if the timeout expires before anything interesting happens. On error, -1 is returned, and errno is set appropriately; the sets and timeout become undefined, so do not rely on their contents after an error.


Te recomiendo probar un código que hice hace unos años, y sería bueno comentaras si te funcionó sobre Linux y Windows, pues lo programé y probé sobre Linux solamente...

http://www.brainoverflow.org/code/multichatserver.c

Cita
/*
 * MultiChat Server v1.0
 *
 * Servidor de Chat Multiusuario usando select() como multiplexor de E/S de los clientes
 *
 * + Atiende como maximo MAX_USERS usuarios, asi que es posible modificar esta constante
 * + Puedes comunicarte con este servidor por medio de cualquier cliente TCP/IP universal (telnet) al puerto SERVER_PORT
 * + Para enviar un mensaje a todos los usuarios conectados solamente escribe en el canal
 * + Para ver una lista con los usuarios conectados envia /list
 * + Para enviar un mensaje a un usuario especifico pon una / seguida del nick, da un espacio, y luego el mensaje, ejemplo:
 *   /nitr0us Este mensaje va solo para ti nitr0us...
 * + Para salir envia /exit
 *
 *
 * $gcc multichatserver.c -o multichatserver -Wall -O2
 *
 * nitr0us [nitrousenador en gmail punto com]
 * Mexico - 19/Feb/07
 */

Saludos

Mr-x

  • Mensajes: 5
  • Liked: 2
Re:Sockets en Linux y Windows
« Respuesta #2 : septiembre 25, 2019, 12:11:37 pm »
Windows utiliza Winsocks los cuales tienen una sintaxis muy diferente a los unix sockets. Si lo que quieres que que el codigo sea semejante es utilizar descriptores de ficheros en ambos casos pero este tipo de programacion te va a limitar en las posibilidades y manejo de errores con los sockets.