დაკავშირება დაბლოკილია?
დაკავშირება დაბლოკილია?

ვიდეო: დაკავშირება დაბლოკილია?

ვიდეო: დაკავშირება დაბლოკილია?
ვიდეო: როგორ შევიდეთ Adjaranet-ზე სმარტ ტელევიზორით? 2024, ნოემბერი
Anonim

დაკავშირება არის ბლოკირება დარეკეთ ნაგულისხმევად, მაგრამ შეგიძლიათ გააკეთოთ ის არა ბლოკირება SOCK_NONBLOCK დროშის სოკეტზე გადასვლით. დაკავშირება () ბლოკავს TCP 3-მხრივი ხელის ჩამორთმევის დასრულებამდე. მოსმენის მხარეს ხელის ჩამორთმევა მუშავდება TCP/IP სტეკით ბირთვში და სრულდება მომხმარებლის პროცესის შეტყობინების გარეშე.

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

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

რა არის ბლოკირების ფუნქცია? ა ბლოკირების ფუნქცია ძირითადად ითვლის სამუდამოდ. სწორედ ამას ნიშნავს ბლოკირება . სხვა ბლოკირების ფუნქციები დაელოდებოდა IO-ს დაწყებას. არა ბლოკირება IO სისტემა ნიშნავს ა ფუნქცია იწყებს IO მოქმედებას, შემდეგ მიდის უმოქმედო და ამუშავებს IO მოქმედების შედეგს, როდესაც ეს მოხდება.

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

მიღება () ბლოკავს აბონენტს კავშირის არსებობამდე. თუ შეტყობინებების ადგილი არ არის ხელმისაწვდომი აქ სოკეტი შეინახოს გადასაცემი შეტყობინება, შემდეგ send() ჩვეულებრივ ბლოკავს. თუ შეტყობინებები არ არის ხელმისაწვდომი სოკეტი , recv ზარი ელოდება შეტყობინების მიღებას.

არის ბლოკის შერჩევა?

თუ დროის ამოწურვის არგუმენტი მიუთითებს სტრუქტურის ტიპის ობიექტზე, რომლის წევრებია 0, აირჩიეთ () არ ბლოკი . თუ დროის ამოწურვის არგუმენტი არის NULL, აირჩიეთ () ბლოკავს მანამ, სანამ მოვლენა არ გამოიწვევს ერთ-ერთი ნიღბის დაბრუნებას სწორი (არანულოვანი) მნიშვნელობით.

გირჩევთ: