TCP זיהוי התנתקות של הserver

יוגורט

משתמש מקצוען
יש לי client aדרכו אני שולחת הודעות לserver . במקרה הזה אני משתמשת בפקודה nc של לינוקס בתור שרת.
אני מקבלת את ההודעות, ועד השלב הזה הכל עובד מצויין.
כל הבעיה מתחילה שאני סוגרת את הserver ואז הclient לא מזהה ומנסה להמשיך לשלוח.
(הקוד כתוב בC , לינוקס)
 

יוגורט

משתמש מקצוען
אולי תסגרי גם את הקליינט
למה שהקליינט יסגר אם הוא לא מזהה שהserver נסגר?
פתרתי את הבעיה באמצעות תפיסה של SIGPIPE ולאחר מכן הwrite נכשל ואז אני סוגרת את הsocket ופותחת מחדש.
עד שלא תפסתי את הסיגנל הנ"ל הwrite לא החזיר לי שהוא נכשל והתוכנית "עפה"
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
שרת "רגיל" אחרי שהוא נסגר מחזיר RST ואז הקליינט יודע שהחיבור נסגר באופן פתאומי, כמובן שבTCP זה אמור להעשות בצורה שקופה, אבל זה תלוי איך הקליינט עובד, איך את קוראת מידע מהסוקט, באמצעות select? לselect יש גם פרמטר שלישי שזה הfs של הerror, אני מאמין שהוא מחזיר שם סגירה לא צפויה של החיבור.

אני יכול לגגל את זה כדי לבדוק.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
בדקתי בגוגל, שכחתי שselect זה בחלק של השרת, הרבה זמן לא נגעתי בסוקטים בלינוקס, בעיקרון אם את עושה recv וחוזר מידע ריק, אז החיבור נסגר.
 

גזעי

משתמש מקצוען
הנדסת תוכנה
D I G I T A L
אולי גם יעזור לך לראות המ שכתוב פה על keep alive
זה גורם שבמידה והחיבור נסגר, הכתיבה\קריאה מהסוקט תיכשל ו-errno() יחזיר שגיאה
 

אולי מעניין אותך גם...

הפרק היומי

הפרק היומי! כל ערב פרק תהילים חדש. הצטרפו אלינו לקריאת תהילים משותפת!


תהילים פרק קיט ב'

ט בַּמֶּה יְזַכֶּה נַּעַר אֶת אָרְחוֹ לִשְׁמֹר כִּדְבָרֶךָ:י בְּכָל לִבִּי דְרַשְׁתִּיךָ אַל תַּשְׁגֵּנִי מִמִּצְוֹתֶיךָ:יא בְּלִבִּי צָפַנְתִּי אִמְרָתֶךָ לְמַעַן לֹא אֶחֱטָא לָךְ:יב בָּרוּךְ אַתָּה יְהוָה לַמְּדֵנִי חֻקֶּיךָ:יג בִּשְׂפָתַי סִפַּרְתִּי כֹּל מִשְׁפְּטֵי פִיךָ:יד בְּדֶרֶךְ עֵדְוֹתֶיךָ שַׂשְׂתִּי כְּעַל כָּל הוֹן:טו בְּפִקֻּדֶיךָ אָשִׂיחָה וְאַבִּיטָה אֹרְחֹתֶיךָ:טז בְּחֻקֹּתֶיךָ אֶשְׁתַּעֲשָׁע לֹא אֶשְׁכַּח דְּבָרֶךָ:
נקרא  5  פעמים

לוח מודעות

למעלה