אחדד
אין אצלנו מצב של מקור א' ומקור ב': אני המקור היחיד ואני שולח את ההודעת בסדר הנכון: אני לא שולח הודעה, עד שהודעה קודמת סיימה להישלח.
גם בכיוון ההפוך אין בעיה מפני שאני יודע להתמודד עם כל תקלה בצד של השולח.
 
כל הודעה שאני מייצר עוברת סריאליזציה לבתים, ואז אני מכניס אותה לחוצץ. החוצץ מחזיק מצביע למקום האחרון ממנו קראתי אל תוך ה - socket ומצביע למקום האחרון בו יש מידע, כך שאני אכתוב ל - socket לכל היותר מהמצביע הראשון עד לשני.
ברגע שאני מקבל write-ready מה - socket, אני כותב מידע ל - socket החל מהמצביע הראשון ואז מקדם אותו על פי גודל המידע שאכן נכתב. בזמן הזה, כמובן יכול להיות שהודעות יתווספו והמצביע השני גם יתקדם.
מכאן ברור, שהחוצץ עצמו לא מכיר את המושג "הודעה" וכך גם הכתיבה. אני כותב את כל הבתים שאני יכול לכתוב ברגע נתון, וכמובן שיש סיכוי שאשלח הודעה שלמה, חלקי הודעה וכו'.
 
הלקוח מצידו מצפה שאני אשלח את ההודעות בצורה סינכרונית: אכתוב את כל ההודעה לתוך ה - socket ורק לאחר שסיימתי, אעבור להודעה הבאה.
כשהוא מקבל יותר בתים ממה שהוא ציפה להם, הוא פשוט זורק את כל מה ש"לא צריך".
אם הוא מקבל פחות בתים ממה שהוא ציפה להם, הוא יודע להמתין לבתים הבאים.
 
כך נוצר תרחיש לדוגמה:
1. כתבתי לחוצץ הודעה בגודל 100 בתים.
2. כתבתי לחוצץ הודעה שניה בגודל 100 בתים.
3. כעת המצביע start מצביע על 0 והמצביע end מצביע על 200.
4. קיבלתי write-ready מה - channel.
5. כתבתי 150 בתים (הודעה וחצי). כרגע המצביע start מצביע על 150.
6. הלקוח קרא 150 בתים. את ה-100 הראשונים הפך להודעה ואת ה-50 האחרים זרק.
7. מרגע זה הלקוח יזרוק את כל ההודעות מפני שהן תמיד יתחילו בזבל.