X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=196c410f98fee1a413be763fa9b0355f75557eb5;hp=33f0dfcf98b260a869d57e26a13f6315b3e1a06e;hb=88d22f4971adcbdb816c405a1375ae0a8d57bdde;hpb=59dd0e503abc074d287d42b64b62f8199912b91b diff --git a/sockctrl.tex b/sockctrl.tex index 33f0dfc..196c410 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -781,25 +781,25 @@ ci sono precauzioni particolari da prendere.\footnote{volendo essere pignoli Le funzioni illustrate finora hanno un difetto: utilizzando una area di memoria interna per allocare i contenuti della struttura \struct{hostent} non -possono essere\index{funzioni!rientranti} rientranti. Questo comporta anche -che in due successive chiamate i dati potranno essere sovrascritti. Si tenga -presente poi che copiare il contenuto della sola struttura non è sufficiente -per salvare tutti i dati, in quanto questa contiene puntatori ad altri dati, -che pure possono essere sovrascritti; per questo motivo, se si vuole salvare -il risultato di una chiamata, occorrerà eseguire quella che si chiama una -\itindex{deep~copy} \textit{deep copy}.\footnote{si chiama così quella tecnica - per cui, quando si deve copiare il contenuto di una struttura complessa (con - puntatori che puntano ad altri dati, che a loro volta possono essere - puntatori ad altri dati) si deve copiare non solo il contenuto della - struttura, ma eseguire una scansione per risolvere anche tutti i puntatori - contenuti in essa (e così via se vi sono altre sotto-strutture con altri - puntatori) e copiare anche i dati da questi referenziati.} +possono essere rientranti. Questo comporta anche che in due successive +chiamate i dati potranno essere sovrascritti. Si tenga presente poi che +copiare il contenuto della sola struttura non è sufficiente per salvare tutti +i dati, in quanto questa contiene puntatori ad altri dati, che pure possono +essere sovrascritti; per questo motivo, se si vuole salvare il risultato di +una chiamata, occorrerà eseguire quella che si chiama una \itindex{deep~copy} +\textit{deep copy}.\footnote{si chiama così quella tecnica per cui, quando si + deve copiare il contenuto di una struttura complessa (con puntatori che + puntano ad altri dati, che a loro volta possono essere puntatori ad altri + dati) si deve copiare non solo il contenuto della struttura, ma eseguire una + scansione per risolvere anche tutti i puntatori contenuti in essa (e così + via se vi sono altre sotto-strutture con altri puntatori) e copiare anche i + dati da questi referenziati.} Per ovviare a questi problemi nelle \acr{glibc} sono definite anche delle -versioni \index{funzioni!rientranti} rientranti delle precedenti funzioni, al -solito queste sono caratterizzate dall'avere un suffisso \texttt{\_r}, -pertanto avremo le due funzioni \funcd{gethostbyname\_r} e -\funcd{gethostbyname2\_r} i cui prototipi sono: +versioni rientranti delle precedenti funzioni, al solito queste sono +caratterizzate dall'avere un suffisso \texttt{\_r}, pertanto avremo le due +funzioni \funcd{gethostbyname\_r} e \funcd{gethostbyname2\_r} i cui prototipi +sono: \begin{functions} \headdecl{netdb.h} \headdecl{sys/socket.h} @@ -837,8 +837,8 @@ In caso di successo entrambe le funzioni restituiscono un valore nullo, altrimenti restituiscono un codice di errore negativo e all'indirizzo puntato da \param{result} sarà salvato un puntatore nullo, mentre a quello puntato da \param{h\_errnop} sarà salvato il valore del codice di errore, dato che per -essere \index{funzioni!rientranti} rientrante la funzione non può la variabile -globale \var{h\_errno}. In questo caso il codice di errore, oltre ai valori di +essere rientrante la funzione non può la variabile globale \var{h\_errno}. In +questo caso il codice di errore, oltre ai valori di tab.~\ref{tab:h_errno_values}, può avere anche quello di \errcode{ERANGE} qualora il buffer allocato su \param{buf} non sia sufficiente a contenere i dati, in tal caso si dovrà semplicemente ripetere l'esecuzione della funzione @@ -1103,8 +1103,7 @@ corrisponde agli argomenti specificati; se la risoluzione ha successo viene restituito un puntatore ad una apposita struttura \struct{servent} contenente tutti i risultati, altrimenti viene restituito un puntatore nullo. Si tenga presente che anche in questo caso i dati vengono mantenuti in una area di -memoria statica e che quindi la funzione non è \index{funzioni!rientranti} -rientrante. +memoria statica e che quindi la funzione non è rientrante. \begin{figure}[!htb] \footnotesize \centering @@ -1266,11 +1265,11 @@ Come ultimo argomento in \param{res} deve essere passato un puntatore ad una variabile (di tipo puntatore ad una struttura \struct{addrinfo}) che verrà utilizzata dalla funzione per riportare (come \itindex{value~result~argument} \textit{value result argument}) i propri risultati. La funzione infatti è -\index{funzioni!rientranti} rientrante, ed alloca autonomamente tutta la -memoria necessaria in cui verranno riportati i risultati della risoluzione. -La funzione scriverà all'indirizzo puntato da \param{res} il puntatore -iniziale ad una \itindex{linked~list} \textit{linked list} di strutture di -tipo \struct{addrinfo} contenenti tutte le informazioni ottenute. +rientrante, ed alloca autonomamente tutta la memoria necessaria in cui +verranno riportati i risultati della risoluzione. La funzione scriverà +all'indirizzo puntato da \param{res} il puntatore iniziale ad una +\itindex{linked~list} \textit{linked list} di strutture di tipo +\struct{addrinfo} contenenti tutte le informazioni ottenute. \begin{figure}[!htb] \footnotesize \centering