Chapitre 2 : Structures résistives élémentaires : optimisation des étapes
2.4. Stabilisation de la microstructure du nickel par recuit pré-oxydation
A API do S3L oferece um conjunto de func~oes de escrita e leitura sobre socketsbastante semelhantes as func~oes homologas de Berkeley. O objectivo dessas func~oes e proporcionar ao utilizador de sockets as qualidades de servico que adv^em da utilizac~ao de mensagens S3L (Privacidade, Autenticac~ao, Integridade, Compress~ao, parametrizac~ao do tempo de vida).
Basicamente, as func~oes do S3L assentam em chamadas as func~oes equivalentes de Berkeley, mas escondem do invocador os detalhes de assemblagem e desassemblagem das mensagens S3L que ir~ao transportar os dados do utilizador.
As semelhancas sintacticas entre as func~oes S3L e de Berkeley facilitam bastante a reconvers~ao de aplicac~oes entre os dois grupos de func~oes. Registe{se, todavia, que, em termos sem^anticos, a equival^encia n~ao e total:
as func~oes S3L suportam, por enquanto, apenas sockets do tipo SOCK STREAM e
SOCK DGRAM;
n~ao e possvel denir as func~oes S3L como automaticamente recomecaveis face a ocorr^encia de sinais, ao contrario do que pode ser feito com as func~oes de Berkeley atraves da primitivasiginterrupt;
um eventual par^ametro que indique o numero de bytes a ler e desprezado porque uma func~ao S3L de leitura consome uma (ou mais, c.f. o caso) mensagem S3L completa, cuja dimens~ao e determinada pela analise do seu cabecalho; de igual modo, um valor de retorno que indique o numero de bytes escrito leva em considerac~ao o numero total de bytes da mensagem S3L assemblada e n~ao dos dados que o utilizador forneceu.
Func~oes de Escrita
Nome: S3Lwrite{ escreve uma mensagem S3L para um descritor de cheiro S3Lwrite
Sinopse:
#include <s3lsocket.h>
int S3Lwrite (int fd, char *buf, size t count, S3LCtx *ctx);
Descric~ao:
A func~ao S3Lwrite e analoga a func~ao write, excepto que buf e encapsulado
numa mensagem S3L com base no contexto ctx, antes de ser escrita parafd.
Valores de retorno:
A func~ao retorna o numero de bytes escritos se bem sucedida (esse numero corres- ponde a dimens~ao da mensagem S3L, sendo, invariavelmente, diferente decount).
Caso contrario retorna-1 e errnoe modicada de acordo com o erro especco
em causa.
Erros: Os mesmos valores produzidos por writee mais alguns especcos: EINVAL:
ctxinvalido; EPROTO:
assemblagem da mensagem S3L falhou ou escrita da mensagem S3L com- pleta falhou;
Ver tambem:
write,S3Lread
Nome: S3Lsend, S3Lsendto, S3Lsendmsg{ escrevem mensagens S3L para um descritorS3Lsend
desocket S3Lsendto
S3Lsendmsg
Sinopse:
#include <s3lsocket.h>
int S3Lsend (int fd, void *msg, int len, unsigned int flags, S3LCtx *ctx);
int S3Lsendto (int fd, void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen, void *ctx);
int S3Lsendmsg (int fd, struct msghdr *msg, unsigned int flags, S3LCtx *ctx);
Descric~ao:
As func~oes S3Lsend e S3Lsendto s~ao semelhantes as func~oes send e sendto,
respectivamente, excepto que a mensagem msg e encapsulado numa mensagem
S3L, com base no contextoctx, antes de ser escrita em fd.
A func~ao S3Lsendtopode ser usada para enviar mensagens S3L ponto{a{ponto
ou multiponto, conforme o tipo de endereco IP fornecido no camposin addr do
convertido para S3LCtx * ou S3LMCtx *. Note{se ainda que o envio de mensa-
gens S3L multiponto atraves deS3Lsendtoesta limitado asocketsfdde domnio
AF INETe tipoSOCK DGRAM.
A func~ao S3Lsendmsg e semelhante a func~ao sendmsg, excepto que o vector msg->msg iov e convertido num vector equivalente de mensagens S3L, assem-
bladas com base no contexto ctx.
Valores de retorno:
As func~oes retornam o numero de bytes enviados se bem sucedidas (esse numero corresponde a dimens~ao da mensagem S3L, sendo, invariavelmente, diferente de
len). Caso contrario retornam -1 e errno e modicada de acordo com o erro
especco em causa.
Erros: Os mesmos valores produzidos porsend,sendtoe sendmsge mais alguns valores
especcos:
EINVAL:
ctxinvalido; EPROTO:
assemblagem da mensagem (ou vector de mensagens) S3L falhou ou es- crita da mensagem (ou vector de mensagens) S3L completa(o) falhou; Ver tambem:
send,sendto,sendmsg,S3Lrecv,S3Lrecvfrom,S3Lrecvmsg
Nome: S3Lwritev { escreve um vector de mensagens S3L para um descritor de chei-
ro S3Lwritev
Sinopse:
#include <s3lsocket.h>
int S3Lwritev (int fd, struct iovec *vector, size t count, S3LCtx *ctx);
Descric~ao:
A func~aoS3Lwriteve semelhante a func~aowritev, excepto que o vectorvector
e convertido num vector equivalente de mensagens S3L, assembladas com base no contexto ctxe posteriormente escritas em fd.
Valores de retorno:
A func~ao retorna o numero total de bytes enviados se bem sucedida (esse numero corresponde a dimens~ao do vector de mensagens S3L, sendo, invariavelmente, diferente da soma dos camposiov lendo vector original). Caso contrario retorna -1e a variavel errnoe modicada de acordo com o erro especco em causa.
Erros: Os mesmos valores produzidos por writeve mais alguns valores especcos: EINVAL:
ctxinvalido; EPROTO:
assemblagem do vector de mensagens S3L falhou ou escrita do vector de mensagens S3L completo falhou;
Ver tambem:
writev,S3Lreadv
Func~oes de Leitura
Nome: S3Lread{ l^e uma mensagem S3L de um descritor de cheiro S3Lread
Sinopse:
#include <s3lsocket.h>
int S3Lread (int fd, char *buf, size t count, S3LCtx *ctx);
Descric~ao:
A func~aoS3Lreade analoga a func~aoread, excepto que embufs~ao colocados os
dados do utilizador integrados na mensagem S3L lida defd.
O par^ametro count permanece por raz~oes de compatibilidade de sintaxe, n~ao
sendo determinante no numero de bytes lidos, uma vez que S3Lread l^e sempre
uma mensagem S3L completa. Contudo, espera{se quebuf tenha pelo menos a
dimens~ao dada porcount.
O contexto S3L de recepc~ao e gravado emctx, permitindo a sua eventual reuti-
lizac~ao numa resposta S3L ao originador. Valores de retorno:
A func~ao retorna, se bem sucedida, o numero de bytes dos dados do utiliza- dor integrados na mensagem S3L (esse numero n~ao tem qualquer relac~ao com o par^ametro count). Caso contrario retorna -1 e errno e modicada de acordo
com o erro especco em causa.
Erros: Os mesmos valores produzidos por read e getsockopt e mais alguns valores
especcos:
EINVAL:
ctxnulo; EPROTO:
a leitura da mensagem S3L completa falhou ou a sua desassemblagem falhou;
Ver tambem:
read,S3Lwrite
Nome: S3Lrecv, S3Lrecvfrom, S3Lrecvmsg { le^em mensagens S3L de um descritor
de S3Lrecv
socket S3Lrecvfrom
S3Lrecvmsg
Sinopse:
#include <s3lsocket.h>
int S3Lrecv (int fd, char *buf, int len, unsigned int flags, S3LCtx *ctx);
int S3Lrecvfrom (int fd, char *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen, void *ctx);
int S3Lrecvmsg (int fd, struct msghdr *msg, unsigned int flags, S3LCtx *ctx);
Descric~ao:
As func~oesS3LrecveS3Lrecvfroms~ao semelhantes as func~oesrecve recvfrom,
excepto que embufs~ao colocados os dados do utilizador integrados na mensagem
S3L lida defd.
A func~ao S3Lrecvfrom pode ser usada para receber mensagens S3L ponto{a{
ponto ou multiponto, conforme o tipo do endereco IP relativo a origem dessas mensagens. A necessidade dessa distinc~ao implica que tal endereco seja sempre solicitado, internamente, arecvfrom, sendo devolvido para o exterior em func~ao
do valor dos camposfromefromlende S3Lrecvfrom. Internamente s~ao tambem
feitas as convers~oes adequadas de ctx para S3LCtx * ou S3LMCtx *. Note{se
ainda que a recepc~ao de mensagens S3L multiponto atraves deS3Lrecvfromesta
limitada asocketsfd de domnioAF INET e tipoSOCK DGRAM.
O par^ametrolenpermanece por raz~oes de compatibilidade de sintaxe, n~ao sendo
determinante no numero de bytes lidos, uma vez que S3Lrecv e S3Lrecvfrom
l^eem sempre uma mensagem S3L completa. Contudo, espera{se que buf tenha
pelo menos a dimens~ao dada porlen.
A func~ao S3Lrecvmsg e analoga a func~ao recvmsg excepto que o vector msg->msg iov recebe os dados produzidos pela desassemblagem, com base no
contexto ctx, de um vector de mensagens S3L.
O contexto S3L de recepc~ao e gravado emctx, permitindo, posteriormente, uma
eventual reutilizac~ao. Valores de retorno:
As func~oes retornam, se bem sucedidas, o numero de bytes dos dados do utilizador integrados na mensagem S3L ou a soma desses bytes, no caso de ter sido lido um vector (o valor de retorno n~ao tem qualquer relac~ao com o par^ametro len
ou com o valor inicial dos campos iov len do vector fornecido; estes ultimos
s~ao modicados, re ectindo o numero de bytes recebidos em cada celula). Caso contrario retornam -1 e errnoe modicada de acordo com o erro especco em
causa.
Erros: Os mesmos valores produzidos porrecvfrom,recvmsg,getsockopte mais alguns
valores especcos:
EINVAL:
ctxnulo; EPROTO:
a leitura da mensagem S3L completa (ou do vector de mensagens S3L) falhou ou a sua desassemblagem falhou;
Ver tambem:
Nome: S3Lreadv{ l^e um vector de mensagens S3L de um descritor de cheiro S3Lreadv
Sinopse:
#include <s3lsocket.h>
int S3Lreadv (int fd, struct iovec *vector, size t count, S3LCtx *ctx);
Descric~ao:
A func~ao S3Lreadv e semelhantes a func~ao readv, excepto que em vector s~ao
colocados os dados do utilizador integrados nas mensagens S3L de um vector lido defd.
Os valores originais dos camposiov lendo vectorvectorn~ao s~ao determinantes
para o numero de bytes lidos da mensagem S3L correspondente, uma vez que se l^e um vector linearizado de mensagens S3L completas. Contudo, espera{se que cadaiov basedevectortenha pelo menos a dimens~ao dada pelo campoiov len
respectivo.
O contexto S3L de recepc~ao e gravado emctx, permitindo a sua eventual reuti-
lizac~ao numa resposta S3L ao originador. Valores de retorno:
A func~ao retorna, se bem sucedida, a soma do numero de bytes depositados no vector (o valor de retorno n~ao tem qualquer relac~ao com o o valor inicial dos camposiov len do vector fornecido; estes ultimos s~ao modicados, re ectindo o
numero de bytes recebidos em cada celula). Caso contrario retorna-1 eerrnoe
modicada de acordo com o erro especco em causa.
Erros: Os mesmos valores produzidos por read, readv, recvfrom, getsockopt e mais
alguns valores especcos:
EINVAL:
ctxnulo; EPROTO:
a leitura do vector completo de mensagens S3L falhou ou a sua desas- semblagem falhou;
Ver tambem:
readv,S3Lwritev