יש פה ספצים ב - sockets?

אלדד27

New member
יש פה ספצים ב - sockets?

יש לי בעיה מוזרה... אני מתקשר דרך UDP לשרת מסוים, והכל טוב ויפה. רק מה, באיזשהו שלב הקשר משתבש, ואז נוצר מצב שה select מחזיר לי תשובה טובה, אבל ה - recvfrom שאחריו נכשל, כאילו בכל זאת אין לו מה לקרוא. הדבר היחיד שמצליח לתקן את הבעיה הוא REBOOT למחשב. אני עובד בחלזונות עם winsock 1.1. יש לי חשד שאולי בגלל שאני מפסיק את התוכנית באמצע (אני עושה break ממצב debug), הכל משתבש לו. יכול להיות? windows הרי אמור לשחרר resources לגמרי. וגם אם כן, זה עדיין לא מסביר איך אני מצליח לעשות sendto כמו שצריך... בקיצור, בעיה. חמורה, אפילו
בדיקה ב - TCPView העלתה שהפורט כאילו לא תפוס, ואין בעיה. הכל נראה סבבה, עד שאני עושה recvfrom. יש לכם מושג?
 

voguemaster

New member
התעסקתי מעט מאוד עם UDP

ואכן מה שאתה אומר נשמע לי מוזר מאוד. אני הייתי מציע לך (במידה ולא עשית את זה כבר) לבדוק ERROR על ה-SOCKET בעזרת getsockopt. אולי תצליח לבדוק מה ה-ERROR.. אני תמיד ממליץ לבדוק את מצב ה-ERROR של ה-SOCKET אחרי ש-select משנה את הסט. כמה דברים שצריך לזכור: 1. SOCKET של UDP תמיד שמישה מבחינת שליחה, ללא קשר לכיוון השני (קריאה). 2. select מסמנת SOCKET מסוימת בתור מוכנה לקריאה+כתיבה אם איזשהו ERROR קורה (בעצם הטעיה מסוימת..) אני מציע לך לבדוק ERROR ישירות אחרי SELECT בעזרת האופציה SO_ERROR, כך תחסוך הרבה בעיות (במידה ולא עשית את זה עד עכשיו).. הממ, למה לדעתך הקשר משתבש, או שזו אחת הבעיות ?
 

אלדד27

New member
קודם כל, תודה.

שנית, אני לא עושה select על הקריאה, מן הסתם. אני עושה select על הכתיבה, ובאמת לא בדקתי error, כי לא ידעתי שזו צורת ההתנהגות. select מחזיר בעצמו error code, ואותו בדקתי. למה הקשר משתבש? אין לי מושג. חשדתי באלף ואחד דברים... אבל אף אחד לא התאמת במלואו. זה גם לא קורה באופן קבוע אלא חלקי... בקיצור, בלגאן, ואני בכלל חושד באפופיותי שגרמה לתקלות שלא קשורות לקוד
 

voguemaster

New member
בכל אופן...

כמו שכתבתי (גם וידאתי את זה אגב), אין שום טעם בלהשתמש ב-select על SOCKET של UDP, כי היא תמיד זמינה למשלוח מידע. פשוט הנחתי שהחלק הרלוונטי הוא הקריאה. זה נשמע כמו משהו לא דטרמיניסטי... אחחח אלה הבאגים הכי מגניבים
ניסית לבדוק את תעבורת הפאקטות בעזרת כלי שדומה באופי ל-tcpdump ? בד"כ זה כלי מצוין למטרות האלה... יש גם דברים דומים לחלזונות... ואולי ה-ERROR במידה ויש יכול לשפוך קצת אור על הדברים...
 

אלדד27

New member
מכיר netmonitor?

זה מספר לך *הכל*. זה לא כל כך עזר כי ה-socket נראה תקין ותמים לחלוטין
 

voguemaster

New member
LOL

לא מכיר את האפליקציה, אבל מה לגבי הפקטות שעוברות מהשרת ללקוח ? הן עוברות באמת או שיש משהו דפוק איפשהו ?
 

אלדד27

New member
לא הצלחתי לתפוס אותן

אבל אם יהיה לי מידע נוסף, אשתף. תודה!
 

voguemaster

New member
התעסקתי מעט מאוד עם UDP

ומה שאני כותב כרגע זה ממה שאני יודע על select (השתמשתי בה מספיק
) ואכן מה שאתה אומר נשמע לי מוזר מאוד. אני הייתי מציע לך (במידה ולא עשית את זה כבר) לבדוק ERROR על ה-SOCKET בעזרת getsockopt. אולי תצליח לבדוק מה ה-ERROR.. אני תמיד ממליץ לבדוק את מצב ה-ERROR של ה-SOCKET אחרי ש-select משנה את הסט. כמה דברים שצריך לזכור: 1. SOCKET של UDP תמיד שמישה מבחינת שליחה, ללא קשר לכיוון השני (קריאה). 2. select מסמנת SOCKET מסוימת בתור מוכנה לקריאה+כתיבה אם איזשהו ERROR קורה (בעצם הטעיה מסוימת..) אני מציע לך לבדוק ERROR ישירות אחרי SELECT בעזרת האופציה SO_ERROR, כך תחסוך הרבה בעיות (במידה ולא עשית את זה עד עכשיו).. הממ, למה לדעתך הקשר משתבש, או שזו אחת הבעיות ?
 
למעלה