რა არის არადამბლოკავი სოკეტები?
რა არის არადამბლოკავი სოკეტები?

ვიდეო: რა არის არადამბლოკავი სოკეტები?

ვიდეო: რა არის არადამბლოკავი სოკეტები?
ვიდეო: Socket Programming Part - 4 (Blocking vs non blocking sockets) in C/C++ 2024, ნოემბერი
Anonim

არა - სოკეტების დაბლოკვა . ამ პრობლემის გადაწყვეტა ეწოდება " არა - სოკეტების დაბლოკვა ნაგულისხმევად, TCP სოკეტები არიან " ბლოკირება " რეჟიმი. მაგალითად, როცა recv()-ს უწოდებთ ნაკადიდან წასაკითხად, კონტროლი არ უბრუნდება თქვენს პროგრამას მანამ, სანამ მონაცემების მინიმუმ ერთი ბაიტი არ წაიკითხება დისტანციური საიტიდან.

შესაბამისად, რა არის ბლოკირებადი და არაბლოკირებელი სოკეტი?

In ბლოკირება რეჟიმი, recv, გაგზავნა, დაკავშირება (მხოლოდ TCP) და მიღება (მხოლოდ TCP) სოკეტი API ზარები იქნება ბლოკი განუსაზღვრელი ვადით, სანამ არ შესრულდება მოთხოვნილი მოქმედება. In არა - ბლოკირება რეჟიმი, ეს ფუნქციები დაუყოვნებლივ ბრუნდება. აირჩიეთ ნება ბლოკი სანამ სოკეტი მზადაა.

შეიძლება ასევე იკითხოს, არის თუ არა სოკეტების დაბლოკვა ნაგულისხმევად? ავტორი ნაგულისხმევი , TCP სოკეტები მოთავსებულია ა ბლოკირება რეჟიმი. ეს ნიშნავს, რომ კონტროლი არ დაბრუნდება თქვენს პროგრამაში, სანამ არ დასრულდება რაიმე კონკრეტული ოპერაცია.

ამასთან დაკავშირებით, როგორ აკეთებთ არაბლოკირებულ სოკეტს?

აღსანიშნავად ა სოკეტი როგორც არა - ბლოკირება , ჩვენ ვიყენებთ fcntl სისტემის ზარს. აი მაგალითი: int flags = guard(fcntl(socket_fd, F_GETFL), "ვერ მივიღე ფაილის დროშები"); guard(fcntl(socket_fd, F_SETFL, flags | O_NONBLOCK), "ვერ კომპლექტი ფაილის დროშები");

რა არის სოკეტის დაბლოკვა?

ა სოკეტი შეიძლება იყოს " დაბლოკვის რეჟიმი " ან "არაბლოკირება რეჟიმი "-ის ფუნქციები სოკეტები in ბლოკირება (ან სინქრონული) რეჟიმი არ დაბრუნდეთ მანამ, სანამ არ დაასრულებენ თავიანთ მოქმედებას. Ამას ჰქვია ბლოკირება იმიტომ რომ სოკეტი რომლის ფუნქციაც იყო გამოძახებული, ვერაფერს აკეთებს - დაბლოკილია - სანამ ზარი არ დაბრუნდება.

გირჩევთ: