Skip to main content

Completion

Struct Completion 

Source
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

Source

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

Source

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

Source

pub fn token(&self) -> SubmissionToken

Jeton de l’opération qui a produit cette complétion.

Source

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.

Source

pub fn raw_result(&self) -> i32

Résultat brut du kernel (sémantique dépendante de l’op soumise).

Source

pub fn flags(&self) -> CompletionFlags

Flags de complétion (cf. CompletionFlags).

Source

pub fn has_more(&self) -> bool

IORING_CQE_F_MORE : d’autres complétions suivront (multishot).

Source

pub fn is_notif(&self) -> bool

IORING_CQE_F_NOTIF : complétion de notification zero-copy.

Source

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.

Source

pub fn socket_has_pending_data(&self) -> bool

IORING_CQE_F_SOCK_NONEMPTY : données restantes lisibles après un recv.

Source

pub fn into_result(self) -> Result<i32, Errno>

Interprétation générique : res ≥ 0 → valeur utile, res < 0Err(Errno) (= -res).

§Errors

[Errno] correspondant à -res si le kernel a signalé un échec.

Source

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é).

Source

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).

Source

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é).

Source

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é).

Source

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é.

Source

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é.

Source

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é.

Source

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é.

Source

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é.

Source

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.

Source

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 NOTIFtous 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.

Source

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.

Source

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é.

Source

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é).

Source

pub fn completed(&self) -> Result<(), Errno>

Succès sans valeur de retour (close, fsync, nop…).

§Errors

[Errno] correspondant à -res si l’opération a échoué.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.