pub struct Completion { /* private fields */ }Expand description
Une complétion (CQE décodé). Au Temps 1, les interprétations sont
génériques ; les variantes typées riches (fd accepté/ouvert, etc.)
arrivent aux Temps 2a–2d (ADR-022 Décision 9). Convention de résultat : un
res négatif est un -errno, converti en Err(Errno) par les méthodes
into_* ; un res ≥ 0 est la valeur utile.
Implementations§
Source§impl Completion
impl Completion
Sourcepub fn into_provided_buffer<'r>(
self,
group: &'r mut ProvidedBufferRing,
) -> Option<ProvidedBuffer<'r>>
pub fn into_provided_buffer<'r>( self, group: &'r mut ProvidedBufferRing, ) -> Option<ProvidedBuffer<'r>>
Récupère le buffer choisi par le kernel pour cette complétion
(CQE_F_BUFFER). None si la complétion n’a pas consommé de buffer fourni
(op sans sélection, ou pénurie -ENOBUFS).
L’emprunt &'r mut ProvidedBufferRing interdit le désenregistrement du
groupe tant que le buffer est en cours de traitement.
Source§impl Completion
impl Completion
Sourcepub fn allocated_slot(self) -> Result<u32, Errno>
pub fn allocated_slot(self) -> Result<u32, Errno>
Slot choisi par le kernel pour une variante « direct » à cible
FixedSlotTarget::Alloc (rendu dans cqe->res).
§Errors
L’[Errno] décodé de la complétion (ex. [Errno::ENFILE] si la plage
d’auto-allocation est pleine), ou [Errno::EINVAL] si res est négatif
hors errno.
Source§impl Completion
impl Completion
Sourcepub fn token(&self) -> SubmissionToken
pub fn token(&self) -> SubmissionToken
Jeton de l’opération qui a produit cette complétion.
Sourcepub fn multishot_token(&self) -> Option<MultishotToken>
pub fn multishot_token(&self) -> Option<MultishotToken>
Jeton multishot si cette complétion provient d’une opération multishot
(Temps 3d), None sinon. Toutes les complétions d’un même multishot
(intermédiaires CQE_F_MORE et terminale) portent le même jeton ;
Completion::has_more distingue les intermédiaires de la terminale.
Sourcepub fn raw_result(&self) -> i32
pub fn raw_result(&self) -> i32
Résultat brut du kernel (sémantique dépendante de l’op soumise).
Sourcepub fn flags(&self) -> CompletionFlags
pub fn flags(&self) -> CompletionFlags
Flags de complétion (cf. CompletionFlags).
Sourcepub fn buffer_id(&self) -> Option<u16>
pub fn buffer_id(&self) -> Option<u16>
ID du buffer fourni consommé (IORING_CQE_F_BUFFER), le cas échéant.
L’identifiant occupe les 16 bits de poids fort des flags du CQE.
Sourcepub fn socket_has_pending_data(&self) -> bool
pub fn socket_has_pending_data(&self) -> bool
IORING_CQE_F_SOCK_NONEMPTY : données restantes lisibles après un recv.
Sourcepub fn into_result(self) -> Result<i32, Errno>
pub fn into_result(self) -> Result<i32, Errno>
Interprétation générique : res ≥ 0 → valeur utile, res < 0 →
Err(Errno) (= -res).
§Errors
[Errno] correspondant à -res si le kernel a signalé un échec.
Sourcepub fn into_buffer_result(self) -> Result<(Vec<u8>, usize), Errno>
pub fn into_buffer_result(self) -> Result<(Vec<u8>, usize), Errno>
Récupère le buffer déplacé hors du slot (S1, zéro copie) avec le
nombre d’octets traités (submit_read/submit_write).
§Errors
[Errno] correspondant à -res si l’opération a échoué (le buffer est
alors consommé sans être restitué).
Sourcepub fn into_vectored_result(self) -> Result<(Vec<Vec<u8>>, usize), Errno>
pub fn into_vectored_result(self) -> Result<(Vec<Vec<u8>>, usize), Errno>
Récupère les buffers vectorisés déplacés hors du slot avec le nombre
total d’octets traités (submit_readv/submit_writev).
§Errors
[Errno] correspondant à -res si l’opération a échoué (les buffers
sont alors consommés sans être restitués).
Sourcepub fn into_statx(self) -> Result<Box<Statx>, Errno>
pub fn into_statx(self) -> Result<Box<Statx>, Errno>
Récupère le tampon statx déplacé hors du slot, rempli par le kernel
(submit_statx).
§Errors
[Errno] correspondant à -res si l’opération a échoué (le tampon est
alors consommé sans être restitué).
Sourcepub fn into_xattr_result(self) -> Result<(Vec<u8>, usize), Errno>
pub fn into_xattr_result(self) -> Result<(Vec<u8>, usize), Errno>
Récupère le buffer de valeur xattr déplacé hors du slot avec la
taille rendue par le kernel (submit_getxattr/submit_fgetxattr). La
taille permet de retailler (un buffer trop court ⇒ Err(ERANGE)).
§Errors
[Errno] correspondant à -res si l’opération a échoué (le buffer est
alors consommé sans être restitué).
Sourcepub fn opened_fd(self) -> Result<OwnedFd, Errno>
pub fn opened_fd(self) -> Result<OwnedFd, Errno>
Récupère le descripteur ouvert par submit_openat2.
res (≥ 0) est le numéro de FD ; il devient un [OwnedFd] possédé
(CLOEXEC selon how). Le chemin source, gardé en vie dans le slot, est
libéré ici.
§Errors
[Errno] correspondant à -res si l’ouverture a échoué.
Sourcepub fn into_socket_fd(self) -> Result<OwnedFd, Errno>
pub fn into_socket_fd(self) -> Result<OwnedFd, Errno>
Récupère le socket créé par submit_socket (CLOEXEC).
§Errors
[Errno] correspondant à -res si la création a échoué.
Sourcepub fn accepted_fd(self) -> Result<OwnedFd, Errno>
pub fn accepted_fd(self) -> Result<OwnedFd, Errno>
Récupère le socket accepté par submit_accept (CLOEXEC), sans adresse
pair.
§Errors
[Errno] correspondant à -res si l’accept a échoué.
Sourcepub fn into_accept_result(self) -> Result<(OwnedFd, SocketAddr), Errno>
pub fn into_accept_result(self) -> Result<(OwnedFd, SocketAddr), Errno>
Récupère le socket accepté et l’adresse du pair
(submit_accept_with_peer). L’adresse est décodée du stockage sockaddr
possédé écrit par le kernel.
§Errors
[Errno] correspondant à -res si l’accept a échoué.
Sourcepub fn into_receive_message_result(
self,
) -> Result<(OwnedReceiveMessage, ReceiveMessageMeta), Errno>
pub fn into_receive_message_result( self, ) -> Result<(OwnedReceiveMessage, ReceiveMessageMeta), Errno>
Décode le résultat d’un submit_receive_message : buffers reçus +
métadonnées (ReceiveMessageMeta, adossé à io_uring_recvmsg_out). Les
FD reçus via SCM_RIGHTS sont matérialisés en [OwnedFd] CLOEXEC
(drapeau MSG_CMSG_CLOEXEC posé par la façade). Un cmsg tronqué
(MSG_CTRUNC) est signalé via meta.control_truncated() ; les FD
incomplets ne sont jamais matérialisés (le kernel les ferme) ⇒ aucune
fuite de FD.
§Errors
[Errno] correspondant à -res si le recvmsg a échoué.
Sourcepub fn into_zero_copy_buffer(self) -> Result<Vec<u8>, Errno>
pub fn into_zero_copy_buffer(self) -> Result<Vec<u8>, Errno>
Restitue le buffer zero-copy de submit_send_zero_copy à la complétion
NOTIF (is_notif) — le kernel ne référence plus la mémoire. En cas
d’échec précoce (CQE de résultat res < 0 sans F_MORE, donc
aucune NOTIF à venir), renvoie l’erreur ; le buffer est alors libéré (sûr,
aucune fuite).
Pour un submit_send_message_zero_copy multi-buffers, utiliser
Completion::into_zero_copy_buffers (restitution intégrale, ADR-032) ;
appelé ici, ses buffers sont concaténés sans perte d’octet (les
frontières sont perdues, mais aucune donnée n’est discardée).
§Errors
[Errno] correspondant à -res sur le chemin d’échec précoce.
Sourcepub fn into_zero_copy_buffers(self) -> Result<Vec<Vec<u8>>, Errno>
pub fn into_zero_copy_buffers(self) -> Result<Vec<Vec<u8>>, Errno>
Restitue l’intégralité des buffers zero-copy d’un
submit_send_message_zero_copy à la complétion NOTIF — tous les
buffers du message, intacts et dans l’ordre (ADR-032, zéro perte de
donnée). Le slot S1 les a tous retenus jusqu’au NOTIF. Pour un
submit_send_zero_copy (mono-buffer), renvoie un Vec à un seul élément.
Échec précoce (CQE résultat res < 0 sans F_MORE) : renvoie l’erreur ;
les buffers sont alors libérés (sûr, aucune fuite).
§Errors
[Errno] correspondant à -res sur le chemin d’échec précoce.
Sourcepub fn zero_copy_copied(&self) -> bool
pub fn zero_copy_copied(&self) -> bool
IORING_NOTIF_USAGE_ZC_COPIED : sur une complétion NOTIF avec
ZeroCopyFlags::REPORT_USAGE, indique que le kernel a dû copier (pas
de vrai zero-copy). false hors NOTIF ou sans REPORT_USAGE.
Sourcepub fn into_poll_result(self) -> Result<PollEvents, Errno>
pub fn into_poll_result(self) -> Result<PollEvents, Errno>
Décode les événements prêts d’un submit_poll_add (res ≥ 0 = bitset
PollEvents).
§Errors
[Errno] correspondant à -res si le poll a échoué.
Sourcepub fn into_waitid_result(self) -> Result<Box<SignalInfo>, Errno>
pub fn into_waitid_result(self) -> Result<Box<SignalInfo>, Errno>
Récupère le tampon siginfo_t déplacé hors du slot, rempli par le
kernel (submit_waitid). À lire via
SignalInfo::as_bytes.
§Errors
[Errno] correspondant à -res si le waitid a échoué (le tampon est
alors consommé sans être restitué).