Kas yra neblokuojantys lizdai?
Kas yra neblokuojantys lizdai?

Video: Kas yra neblokuojantys lizdai?

Video: Kas yra neblokuojantys lizdai?
Video: Kas yra „minkštieji įgūdžiai“ ir kaip juos vystyti? 2024, Gegužė
Anonim

ne - blokuojantys lizdai . Šios problemos sprendimas vadinamas " ne - blokuojantys lizdai Pagal numatytuosius nustatymus TCP lizdai yra " blokavimas Pavyzdžiui, kai iškviečiate recv() norėdami skaityti iš srauto, valdymas nebus grąžintas į jūsų programą, kol iš nuotolinės svetainės nenuskaitomas bent vienas baitas duomenų.

Atitinkamai, kas yra blokuojantis ir neblokuojantis lizdas?

Į blokavimas režimas, recv, siųsti, prisijungti (tik TCP) ir priimti (tik TCP) lizdas API skambučiai bus blokas neribotą laiką, kol bus atliktas prašomas veiksmas. Į ne - blokavimas režimu, šios funkcijos iškart sugrįžta. pasirinkti valią blokas iki lizdas yra pasirengusi.

Taip pat galima paklausti, ar lizdai blokuoja pagal nutylėjimą? Autorius numatytas , TCP lizdai yra dedami į a blokavimas režimu. Tai reiškia, kad valdymas nebus grąžintas į jūsų programą, kol nebus atlikta tam tikra operacija.

Kalbant apie tai, kaip padaryti neblokuojantį lizdą?

Norėdami pažymėti a lizdas kaip ne - blokavimas , naudojame fcntl sistemos iškvietimą. Štai pavyzdys: int flags = guard(fcntl(socket_fd, F_GETFL), "nepavyko gauti failo vėliavėlių"); guard(fcntl(socket_fd, F_SETFL, vėliavėlės | O_NONBLOCK), "nepavyko rinkinys failų vėliavėlės“);

Kas yra lizdo blokavimas?

A lizdas gali būti blokavimo režimas “arba „neblokuojantis režimu .“funkcijos lizdai in blokavimas (arba sinchroninis) režimu negrįžkite, kol jie nebaigs savo veiksmo. Tai vadinama blokavimas nes lizdas kurios funkcija buvo iškviesta nieko negali padaryti – yra užblokuotas – kol negrįžta skambutis.

Rekomenduojamas: