7.2.1 Oggetti Socket

Gli oggetti socket hanno i seguenti metodi. Fatta eccezione per makefile() questi corrispondono alle chiamate di sistema Unix applicabili ai socket.

accept( )
Accetta una connessione. Il socket deve essere legato ad un indirizzo ed in attesa di connessioni. Il valore restituito Ŕ una coppia (conn, address) dove conn Ŕ un nuovo oggetto socket da usare per inviare e ricevere dati sulla connessione, mentre address Ŕ l'indirizzo legato al socket dell'altro capo della connessione.

bind( address)
Lega il socket ad address. Il socket non deve essere giÓ legato. (Il formato di address dipende dalla famiglia di indirizzo -- leggere sopra.) Note: Questo metodo storicamente accettava una coppia di parametri per gli indirizzi AF_INET invece di una sola tupla. Ci˛ non Ŕ mai stato intenzionale e non Ŕ pi¨ disponibile in Python 2.0 e successive versioni dell'interprete.

close( )
Chiude il socket. Tutte le future operazioni sull'oggetto socket falliranno. L'altro capo non riceverÓ pi¨ alcun dato (dopo che la coda dei dati sarÓ svuotata). I socket sarano automaticamente chiusi quando verranno raccolti dal garbage-collector.

connect( address)
Connette con un socket remoto all'indirizzo address. (Il formato di address dipende dalla famiglia di indirizzo -- leggere sopra.) Note: Questo metodo storicamente accettava una coppia di parametri per gli indirizzi AF_INET invece di una sola tupla. Ci˛ non Ŕ mai stato intenzionale e non Ŕ pi¨ disponibile su Python 2.0 e successive versioni dell'interprete.

connect_ex( address)
Come connect(address), ma restituisce un indicatore di errore invece di sollevare un'eccezione, per errori restituiti dalla chiamata connect() a livello C (altri problemi, come ``host not found'', possono ancora sollevare eccezioni). L'indicatore di errore Ŕ 0 se l'operazione ha avuto successo, altrimenti viene indicato della variabile errno. Ci˛ torna utile per supportare, ad esempio, connessioni asincrone. Note: Questo metodo storicamente accettava una coppia di parametri per gli indirizzi AF_INET invece di una sola tupla. Ci˛ non Ŕ mai stato intenzionale e non Ŕ pi¨ disponibile su Python 2.0 e successivi.

fileno( )
Restituisce il descrittore di file del socket (uno small integer). Utile con la select.select().

Sotto Windows lo small integer ritornato da questo metodo non pu˛ essere usato dove si pu˛ usare un descrittore di file (come os.fdopen()). Unix non ha questa limitazione.

getpeername( )
Restituisce l'indirizzo remoto al quale il socket Ŕ connesso. Torna utile per trovare il numero di porta di un socket remoto IPv4/v6, ad esempio. (Il formato dell'indirizzo restituito dipende dalla famiglia di indirizzo -- leggere sopra.) Su alcuni sistemi questa funzione non Ŕ supportata.

getsockname( )
Restituisce l'indirizzo stesso del socket. Torna utile per trovare il numero di porta di un socket IPv4/v6, ad esempio. (Il formato di un indirizzo restituito dipende dalla famiglia di indirizzo -- leggere sopra.)

getsockopt( level, optname[, buflen])
Restituisce il valore dell'opzione socket data (leggere la pagina di manuale Unix getsockopt(2)). Le costanti simboliche di cui ha bisogno (SO_* etc.) sono definite in questo modulo. Se buflen Ŕ assente, viene considerata un'opzione intera ed il suo valore intero viene restituito dalla funzione. Se buflen Ŕ presente, specifica la lunghezza massima del buffer usata per ricevere l'opzione, e questo buffer Ŕ restituito come stringa. È compito del chiamante decodificare il contenuto del buffer (leggere il modulo built-in facoltativo struct per un modo per decodificare le strutture C codificate come stringhe).

listen( backlog)
Attende connessioni fatte al socket. L'argomento backlog specifica il numero massimo di connessioni accodabili e dovrebbe essere almeno 1; il valore massimo dipende dal sistema (solitamente 5).

makefile( [mode[, bufsize]])
Restituisce un oggetto file associato al socket. (Gli oggetti file sono descritti nella sezione 2.3.9, ``Oggetti File.'') L'oggetto file si riferisce ad una versione dup()ped del descrittore file del socket, quindi l'oggetto file e l'oggetto socket possono essere chiusi o raccolti dal garbage-collector indipendentemente. Il socket dovrebbe essere in modalitÓ bloccante. Gli argomenti opzionali mode e bufsize sono interpretati nello stesso modo della funzione built-in file(); leggere ``Funzioni built-in'' (sezione 2.1) per ulteriori informazioni.

recv( bufsize[, flags])
Riceve dati dal socket. Il valore restituito Ŕ una stringa che rappresenta i dati ricevuti. Il massimo ammontare di dati da ricevere in una volta viene specificato da bufsize. Leggere la pagina di manuale Unix recv(2) per informazioni sul significato dell'argomento facoltativo flags; il valore predefinito Ŕ zero.

recvfrom( bufsize[, flags])
Riceve dati dal socket. Il valore restituito Ŕ una coppia (string, address) dove string Ŕ una stringa che rappresenta i dati ricevuti e address Ŕ l'indirizzo del socket che ha inviato i dati. L'argomento opzionale flags ha lo stesso significato della recv() sopra. (Il formato di address dipende dalla famiglia di indirizzo -- leggere sopra.)

send( string[, flags])
Invia dati al socket. Il socket deve essere connesso ad un socket remoto. L'argomento facoltativo flags ha lo stesso significato della recv() precedente. Restituisce il numero di byte inviati. Gli applicativi sono responsabili del controllo di tutti i dati che vengono trasmessi; se solo una parte dei dati viene inviata, l'applicativo deve tentare la consegna dei dati rimanenti.

sendall( string[, flags])
Invia dati al socket. Il socket deve essere connesso ad un socket remoto. L'argomento facoltativo flags ha lo stesso significato della recv() precedente. Diversamente da send(), questo metodo continua ad inviare dati da string fino a che tutti i dati vengano inviati o accada un errore. Viene restituito None in caso di successo. In caso di errore, viene sollevata un'eccezione, e non c'Ŕ modo di determinare quanti dati siano stati effettivamente inviati.

sendto( string[, flags], address)
Invia dati al socket. Il socket non dovrebbe essere connesso ad un socket remoto, visto che il socket di destinazione Ŕ specificato da address. L'argomento facoltativo flags ha lo stesso significato della recv() precedente. Restituisce il numero di byte inviati. (Il formato di address dipende dalla famiglia di indirizzo -- leggere sopra.)

setblocking( flag)
Imposta la modalitÓ bloccante o non-bloccante sul socket: se flag Ŕ 0, il socket Ŕ impostato come non-bloccante, altrimenti Ŕ in modalitÓ bloccante. Inizialmente tutti i socket sono in modalitÓ bloccante. In modalitÓ non-bloccante, se una chiamata recv() non trova alcun dato, o se una chiamata send() non pu˛ avere subito a disposizione i dati, viene sollevata un'eccezione error; in modalitÓ bloccante, la chiamata si ferma fino a che non Ŕ possibile procedere. s.setblocking(0) equivale a s.settimeout(0); s.setblocking(1) equivale a s.settimeout(None).

settimeout( value)
Imposta un timeout sulle operazioni di bloccaggio del socket. L'argomento value pu˛ essere un numero in virgola mobile non negativo espresso in secondi, o None. Se viene passato un numero in virgola mobile, le operazioni socket seguenti solleveranno un'eccezione timeout se scade il periodo di timeout prima che l'operazione venga completata. Impostando un timeout a None vengono disabilitati i timeout su ogni operazione. s.settimeout(0.0) equivale a s.setblocking(0); s.settimeout(None) equivale a s.setblocking(1). Nuovo nella versione 2.3.

gettimeout( )
Restituisce il timeout in secondi in virgola mobile associato alle operazioni socket o None se non Ŕ impostato alcun timeout. Ci˛ riflette l'ultima chiamata a setblocking() o settimeout(). Nuovo nella versione 2.3.

Alcune note sui timeout ed il bloccaggio dei socket: un oggetto socket pu˛ essere in una di queste tre modalitÓ: bloccante, non-bloccante, o timeout. I socket vengono sempre creati in modalitÓ bloccante. In modalitÓ bloccante, le operazioni sono bloccate fino al loro completamento. In modalitÓ non-bloccante, le operazioni falliscono (con un errore che Ŕ sfortunatamente dipendente dal sistema) se non possono essere completati immediatamente. In modalitÓ timeout le operazioni falliscono se non possono essere completate durante il timeout specificato per il socket. Il metodo setblocking() Ŕ semplicemente una scorciatoia per alcune chiamate a settimeout().

La modalitÓ timeout imposta internamente il socket in modalitÓ non-bloccante. Le modalitÓ bloccante e timeout sono condivise fra descrittori di file e oggetti socket che si riferiscono alla stessa estremitÓ della rete. Una conseguenza di questo Ŕ che gli oggetti file ritornati dal metodo makefile() dovrebbero essere usati solo per socket in modaliÓ bloccante; nelle modalitÓ timeout e non bloccanti le operazioni sui file che non possono essere completate immediatamente falliranno.

Notare che l'operazione connect() Ŕ soggetta alle impostazioni di timeout, ed in generale viene raccomandato di chiamare la settimeout() prima di chiamare la connect().

setsockopt( level, optname, value)
Imposta il valore per la data opzione socket (leggere la pagina di manuale Unix setsockopt(2)). Le costanti simboliche richieste sono definite nel modulo socket (SO_* ecc.). value pu˛ essere un intero o una stringa rappresentante un buffer. Nell'ultimo caso Ŕ compito del chiamante assicurarsi che la stringa contenga i bit adatti (leggere il modulo facoltativo built-in struct per un modo per codificare strutture C come stringhe).

shutdown( how)
Chiude una o entrambe le metÓ della connessione. Se how Ŕ SHUT_RD, saranno disabilitate ulteriori ricezioni. Se how Ŕ SHUT_WR, saranno disabilitati ulteriori invii. Se how Ŕ SHUT_RDWR, verranno disabilitati entrambi.

Notare che non esiste alcuna read() o write(); usare recv() e send() senza argomenti flags al loro posto.

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.