fds->fd_array[0] unter LINUX ?!
-
Hallo Forum,
TELNET_T *read_fd(fd_set *fds) { int i; for (i = 0, telnetpoi = telnettbl; i < MAXTELNET; i++, telnetpoi++) { if (telnetpoi->aktiv) { if (telnetpoi->sock == fds->fd_array[0]) { ulink((LEHEAD *)telnetpoi); relink((LEHEAD *)telnetpoi, (LEHEAD *)h_llp->tail); return(telnetpoi); } } } return(telnetpoi); }Der Code geht ohne Probleme unter Win32, aber unter LINUX bekomme
ich folgende Fehlermeldung:structure has no member named `fd_array
Was muss ich aendern das es geht ?!
mfg Oliver Kern.
-
Hallo,
versuche
... if (telnetpoi->sock == fds->__fds_bits[0]) ...bzw.
... if (telnetpoi->sock == fds->fds_bits[0]) ...MfG
-
Hallo Forum,
...
if (telnetpoi->sock == fds->__fds_bits[0])
...das funktioniert zwar, aber beim vergleichen der werte von
telnetpoi->sock und fds->__fds_bits[0] geht irgendwas schief.Wertzuweisung fuer telnetpoi->sock:
j = accept(fd_telnet, (struct sockaddr *) &peeraddr_in, &addrlen); ... telnetpoi->sock = j;nun kommt eine erneuerte anfrage vom eingeloggten User bzw. ich habe
den sock-wert und will den vergleichen:telnetpoi = read_fd(&fds); ... TELNET_T *read_fd(fd_set *fds) { LHEAD *h_llp; int i; h_llp = &telnetactl; for (i = 0, telnetpoi = telnettbl; i < MAXTELNET; i++, telnetpoi++) { if (telnetpoi->aktiv) { if (telnetpoi->sock == fds->__fds_bits[0]) { ulink((LEHEAD *)telnetpoi); relink((LEHEAD *)telnetpoi, (LEHEAD *)h_llp->tail); return(telnetpoi); } } } return(FALSE); }normal muesste telnetpoi->sock und fds->__fds_bits[0] gleiche werte
haben, aber fds->__fds_bits[0] 64
[1] 0 <31x>uebrigens der wert in telnetpoi->sock ist 6
oder muss der wert aufgerundet werden ?!
ist das ueberhaupt die richtige variable __fds_bits[0] ?!mfg Oliver Kern.
-
FD_SET
FD_ISSETversuch mal FD_SET und FD_ISSET
-
diese funktion faengt die socketanfragen ab:
int telnet_recv(fd_set rset) { int count = -1; int max_sock = -1; struct timeval timevalue; int j = -1; int addrlen = -1; ULONG peerip = 0; UBYTE ip[17]; if (!telnet_active) return(-1); timevalue.tv_usec = 10000; timevalue.tv_sec = 0; FD_ZERO(&fds); /* sind User in der Liste, muessen die */ /* sock-werte in fds eingetragen werden.*/ /* Das macht die funtkion get_fds. */ max_sock = get_fds(&fds); if (fd_telnet > max_sock) max_sock = fd_telnet; FD_SET(fd_telnet, &fds); count = select(max_sock + 1, &fds, NULL, NULL, &timevalue); if (count == 0 || count == -1) return(-1); if (FD_ISSET(fd_telnet,&fds)) { addrlen = sizeof peeraddr_in; j = accept(fd_telnet, (struct sockaddr *) &peeraddr_in, &addrlen); if (j != EOF) { peerip = peeraddr_in.sin_addr.s_addr; strcpy (ip, in_ntoa (peerip)); /* Neuen User in der Liste aufnehmen. */ /* bekannt ist der sock-Wert und die IP-Adresse. */ telnetpoi = TelnetUser(j,ip); return(FALSE); } } /* User aus der Liste holen. */ /* Der Sock-Wert steht in fds. */ telnetpoi = read_fd(&fds); /* empfangen und senden an User. */ lese_socket(telnetpoi); return(FALSE); }Unter Win32 sind die Variablen telnetpoi->sock und fds gleich, nur
unter LINUX will das nicht so recht.mfg Oliver Kern.
-
das ist schrott !!!
if (telnetpoi->sock == fds->fd_array[0])
so waere die richtige Implementierung:
if (FD_ISSET(telnetpoi->sock,fds))es kann doch so einfach sein .....
mfg Oliver Kern.
PS: Vielen Dank noch an Felix Opitz.