
20-01-2006, 02:36
|
|
|
|
חבר מתאריך: 31.07.04
הודעות: 198
|
|
אוקיי... כתבתי פיתרון חלופי, והוא כמעט מושלם...
זו הפונקציה החדשה:
קוד PHP:
private void performDisconnect(bool sendDisconnectionPack) { if (sck != null) { if (sendDisconnectionPack) { sendPack(CMD_DISCONNECT); disconnectWait = new EventWaitHandle(false, EventResetMode.ManualReset); disconnectWait.WaitOne(5000, false); disconnectWait.Close(); disconnectWait = null; } if (sck.Connected) sck.Shutdown(SocketShutdown.Both); sck.Close(); sck = null; } }
הרעיון הוא לשלוח לצד השני חבילה שאומרת לו שהגיעה זמן להתנתק...
זה עובד טוב מאוד... ההתנתקות מצליחה...
אבל! הבעיה היא כשאני מנסה להתחבר שוב...
משום מה הSocket שלי נשאר במצב של Bind, או Listening... אני כבר לא יודע...
ואז כשאני עושה Listen שוב, אני מקבל שגיאה בקריאה לBind, שאומרת כי מותר רק שימוש אחד בכל פעם או משהו כזה...
וגרוע מזה... אם אני לוחץ שוב על התחברות, זה מתחבר!
אבל זה לא מתחבר אל הקצה השני, אלא סתם מתחבר באוויר כזה... אין לי מושג לאן בדיוק...
בלחיצה על Connect, אני מזמן את BeginConnect, ונותן לה את הconnectCallBack שלי.
ושם, אחרי שאני עושה (...)sck.EndConnect, אני בודק האם באמת יש חיבור, ע"י sck.Connected, והוא מראה שהוא מחובר!!
WTF?!
כפי שאפשר לראות מפונקצית ההתנתקות שלי, אני עושה ShutDown, וסוגר את הSocket... אך זה בכל זאת קורה...
ניסיתי לחפש דרך לעשות מעין Unbind כזה, אבל לא מצאתי...
פתרונות??
|