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>
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 into_socket_fd(self) -> Result<OwnedFd, Errno>
pub fn into_socket_fd(self) -> Result<OwnedFd, Errno>
Sourcepub fn accepted_fd(self) -> Result<OwnedFd, Errno>
pub fn accepted_fd(self) -> Result<OwnedFd, Errno>
Sourcepub fn into_accept_result(self) -> Result<(OwnedFd, SocketAddr), Errno>
pub fn into_accept_result(self) -> Result<(OwnedFd, SocketAddr), Errno>
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>
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é).