Блоклохгүй залгуур гэж юу вэ?
Блоклохгүй залгуур гэж юу вэ?

Видео: Блоклохгүй залгуур гэж юу вэ?

Видео: Блоклохгүй залгуур гэж юу вэ?
Видео: ТОГЛООМД ЗОРИУЛСАН видео ПРОЕКТОР!!! ANDROID 9.0 #vivicine дээр суурилсан VIVICINE K3 2024, May
Anonim

үгүй - залгууруудыг хаах . Энэ асуудлын шийдлийг "гэж нэрлэдэг. үгүй - залгууруудыг хаах ". Анхдагч байдлаар, TCP залгуурууд байгаа" блоклох " горим. Жишээлбэл, та урсгалаас уншихын тулд recv()-г дуудах үед алсын сайтаас дор хаяж нэг байт өгөгдлийг унших хүртэл удирдлага нь таны програм руу буцаж ирэхгүй.

Үүний дагуу блоклох ба блоклохгүй залгуур гэж юу вэ?

онд блоклох горим, хүлээн авах, илгээх, холбох (зөвхөн TCP) болон хүлээн авах (зөвхөн TCP) залгуур API дуудлага хийх болно блок хүссэн үйлдлийг гүйцэтгэх хүртэл тодорхойгүй хугацаагаар. онд үгүй - блоклох горимд эдгээр функцууд нэн даруй буцаж ирнэ. хүсэл зоригийг сонгоно блок хүртэл залгуур бэлэн.

Нэг нь бас асууж магадгүй, залгуурууд анхдагчаар хаагддаг уу? By анхдагч , TCP залгуурууд а-д байрлуулсан блоклох горим. Энэ нь тодорхой үйл ажиллагаа дуусах хүртэл хяналт таны програм руу буцаагдахгүй гэсэн үг юм.

Үүнтэй холбогдуулан блоклохгүй залгуурыг хэрхэн яаж хийх вэ?

Тэмдэглэхийн тулд a залгуур зэрэг үгүй - блоклох , бид fcntl системийн дуудлагыг ашигладаг. Энд жишээ байна: int flags = guard(fcntl(socket_fd, F_GETFL), "файлын тугуудыг авч чадсангүй"); хамгаалалт(fcntl(сокет_fd, F_SETFL, тугнууд | O_NONBLOCK), "болоогүй тогтоосон файлын тугнууд");

Сокет хаах гэж юу вэ?

А залгуур байж болно" блоклох горим "эсвэл" блоклохгүй горим ." функцууд залгуурууд in блоклох (эсвэл синхрон) горим Тэд үйлдлээ дуусгах хүртэл буцаж болохгүй. Үүнийг гэж нэрлэдэг блоклох учир нь залгуур Дуудсан функц нь юу ч хийж чадахгүй, дуудлага буцаж ирэх хүртэл хаагдсан байна.

Зөвлөмж болгож буй: