Hvad er ikke-blokerende stikkontakter?
Hvad er ikke-blokerende stikkontakter?

Video: Hvad er ikke-blokerende stikkontakter?

Video: Hvad er ikke-blokerende stikkontakter?
Video: Stikkontakt 2024, Kan
Anonim

ikke - blokerende stikkontakter . Løsningen på dette problem hedder " ikke - blokerende stikkontakter ". Som standard er TCP stikkontakter er inde " blokering "-tilstand. Når du f.eks. kalder recv() for at læse fra en strøm, returneres kontrol ikke til dit program, før mindst én byte af data er læst fra det eksterne websted.

Derfor, hvad er blokerende og ikke-blokerende stik?

I blokering tilstand, recv, send, connect (kun TCP) og accept (kun TCP) stikkontakt API-kald vil blok på ubestemt tid, indtil den ønskede handling er blevet udført. I ikke - blokering tilstand, vender disse funktioner tilbage med det samme. vælge vilje blok indtil stikkontakt er klar.

Man kan også spørge, om stikkontakter blokerer som standard? Ved Standard , TCP stikkontakter er placeret i en blokering mode. Det betyder, at kontrollen ikke returneres til dit program, før en bestemt handling er fuldført.

Med hensyn til dette, hvordan laver man en ikke-blokerende stikkontakt?

At markere en stikkontakt som ikke - blokering , bruger vi fcntl-systemkaldet. Her er et eksempel: int flag = guard(fcntl(socket_fd, F_GETFL), "kunne ikke hente filflag"); guard(fcntl(socket_fd, F_SETFL, flag | O_NONBLOCK), "kunne ikke sæt fil flag");

Hvad er socket blocking?

EN stikkontakt kan være i" blokeringstilstand " eller "ikke-blokerende mode ." Funktionerne af stikkontakter i blokering (eller synkron) mode ikke vende tilbage, før de kan fuldføre deres handling. Dette kaldes blokering fordi stikkontakt hvis funktion blev kaldt kan ikke gøre noget - er blokeret - indtil opkaldet vender tilbage.

Anbefalede: