Newsgroup: it.comp.os.linux.development
Titolo: help:socket select()

Salve!
Continuando la mia esplorazione dei socket sono riuscito ad ottenere 
una connessione non bloccante che funziona.
Ho fissato un ritardo fisso di 1 secondo, ma volevo usare la select,
per attendere finchè non ci sono dati da leggere pronti.
Ho provato col seguente codice, ma ottengo sempre un errore :
  fd_set sk;
  struct timeval timeout;
  int sv;
  // sd è il descrittore di socket 
  timeout.tv_sec  = 5;
  timeout.tv_usec = 0;
  FD_ZERO(&sk);           
  FD_SET(sd,&sk);         
  sv=select(sd,&sk,NULL,NULL,&timeout);
  if (sv<0)  
    error("Errore nella select<BR>");
  else
  if (sv==0) { 
    sprintf(s,"Superato TIMEOUT [%dsec]\n",TIMEOUT);
    error(s);
  }
  else {
    // sono disponibili i dati, quindi si puo leggerli
  }
 
L'errore è "Operation Now in progress".
se invece uso 
select(sd+1,...
butta fuori dati a caso e va in segmantation fault
Dove sta lo sbaglio ?
Grazie 10000
______________________
Matteo Poropat
mat...@genhome.org
http://www.genhome.org

 Dove sta lo sbaglio ?
non so... prova a fare debug con gdb o ltrace. Non e' detto che il problema 
sia nella select.

 usa sempre FD_SETSIZE nel primo parametro di select();
Non credo abbia bisogno di controllare cosi' tanti descrittori.
-- 
Fabio Bonelli  fabio161616(at)
libero.it
 blackmagic(at)
penguinpowered.com
Sword fighting is kinda like making love. It's not
always what you do, but what you say.  	-- Captain Smirk

una connessione non bloccante che funziona.
[CUT]
A questo punto ti consiglio l'acquisto di:
Richard Stevens
Unix Network Programming
Ed. Prentice Hall.
Costa + 100KLire, ma ne vale la pena, credimi !
Fai molto prima, molti meno errori e capisci il xchč di tante cose.
Ciao
Fausto

  sv=select(sd,&sk,NULL,NULL,&timeout);
il primo argomento non deve essere sd ma il numero (nel senso 0=stdin 1=stdout
2=stderr 3...)
massimo dei descrittori aperti dal processo  piu' uno. se vuoi stare sicuro
puoi metterci FD_SETSIZE ma la maggior parte delle volte basta un valore
tipo 5.
<errore che ho cancellato...>
chi te lo da questo errore?
Vi][oZ
-- 
          We are the true believers
       It's our turn to show the world
 In the fire of heavy metal we were burned
         It's more than our religion
          It's the only way to live
           But the enemies of metal
              We can't forgive

 puoi metterci FD_SETSIZE ma la maggior parte delle volte basta un valore
perche' nella man page di select (ne' altrove, a dire il vero) trovo
alcun riferimento a questo FD_SETSIZE?
-- 
addio, e grazie per tutto il pesce

 Costa + 100KLire, ma ne vale la pena, credimi !
a proposito di questo libro... ma non sono due volumi? Cosi' mi era
parso di capire.


 parso di capire.
La prima edizione era un solo volume. La seconda era programmata in 3
volumi, ma Stevens non e` riuscito a scrivere il terzo.
Costano sulle 100-120.000 l'uno.
Bye.
-- 
Signature under rework - Shuriken

 Costano sulle 100-120.000 l'uno.
:(((((((


 qualche modo obsoleta, o la seconda, piu' aggiornata ma incompleta?
Secondo me la seconda, che riprende tutto della prima, e la aggiorna
(alcuni capitoli della prima edizione sono stati espansi da 1 a 4-5
capitoli per lo stesso argomento).
Al limite, si possono prendere tutte e 2, si hanno lo stesso 3 libri,
si copre tutto (anche quello del terzo libro non uscito).
I volumi sono:
1- Networking APIs: Sockets and XTI (cap. da 1 a 8, 3 escluso della
prima edizione)
2- Interprocess Communications (estende il capitolo 3 della prima
edizione)
3- (non pubblicato) Applications (questo doveva estendere i concetti
dei capitoli 9-18 della prima edizione). Questo avrebbe dovuto spiegare
il funzionamento dei vari programmi per internet (demoni, utility,
ecc.) da quel che ho capito.
