מהם שקעים לא חוסמים?
מהם שקעים לא חוסמים?

וִידֵאוֹ: מהם שקעים לא חוסמים?

וִידֵאוֹ: מהם שקעים לא חוסמים?
וִידֵאוֹ: "הם חוסמים את איילון - אנחנו נחסום בקיבוצים" | דוקותיים 2024, מאי
Anonim

לֹא - חסימת שקעים . הפתרון לבעיה זו נקרא " לֹא - חסימת שקעים כברירת מחדל, TCP שקעים נמצאים ב" חסימה " מצב. לדוגמה, כאשר אתה קורא recv() כדי לקרוא מזרם, השליטה לא מוחזרת לתוכנית שלך עד שלפחות בייט אחד של נתונים ייקרא מהאתר המרוחק.

בהתאם, מהו שקע חוסם ולא חוסם?

ב חסימה מצב, recv, שלח, התחבר (TCP בלבד) וקבל (TCP בלבד) שֶׁקַע קריאות API יהיו לַחסוֹם ללא הגבלת זמן עד לביצוע הפעולה המבוקשת. ב לֹא - חסימה במצב, פונקציות אלה חוזרות מיד. בחר צוואה לַחסוֹם עד ה שֶׁקַע מוכן.

אפשר גם לשאול, האם שקעים חוסמים כברירת מחדל? על ידי בְּרִירַת מֶחדָל , TCP שקעים ממוקמים בתוך א חסימה מצב. המשמעות היא שהפקד לא מוחזר לתוכנית שלך עד שתושלם פעולה מסוימת.

לגבי זה, איך מייצרים שקע לא חוסם?

לסמן א שֶׁקַע כפי ש לֹא - חסימה , אנו משתמשים בקריאה למערכת fcntl. הנה דוגמה: int flags = guard(fcntl(socket_fd, F_GETFL), "לא ניתן היה להשיג דגלי קובץ"); guard(fcntl(socket_fd, F_SETFL, flags | O_NONBLOCK), "לא יכולתי מַעֲרֶכֶת דגלי קובץ");

מה זה חסימת שקעים?

א שֶׁקַע יכול להיות ב" מצב חסימה " או "לא חסימה מצב ." הפונקציות של שקעים ב חסימה (או סינכרוני) מצב אל תחזור עד שיוכלו להשלים את פעולתם. זה נקרא חסימה בגלל ה שֶׁקַע שהפונקציה שלו נקראה לא יכול לעשות כלום - נחסם - עד שהקריאה חוזרת.

מוּמלָץ: