send לא חוסם? (sockets)
הקדמה: עשיתי שרת קטן שמאזין לפורט מסויים עם listen, וכשaccept חוזר, הוא פותח תהליך חדש (fork) שמטפל בוא. אני רוצה עכשיו להעביר מידע מקובץ לfd שקיבלתי מהaccept ולסגור את התהליך שיצרתי. בסדר. העברתי את המידע עם read מהקובץ וsend(client_fd, buf, count, 0) (אפשר גם להשתמש בwrite...) ללקוח. אחרי זה אני סוגר את את הfd של הלקוח, ויוצא מהתוכנית. הבעיה: הבעיה היא שאם אני ישר סוגר את הfd של הלקוח, לפעמים חלק מהמידע לא מגיע ללקוח (אף על פי שsend אמור להיות block, ולפי מהערך החזרה שלו, הכל נשלח). בשביל "לתקן" את הבעיה אני צריך לעשות sleep לפני שאני סוגר את הfd של הלקוח בשביל שהתהליך יסיים להעביר לו את כל המידע. למה זה ככה? מה עשיתי לא נכון? (התוכנית הזאת אמורה להיות התחלה של שרת http בסיסי מאוד. בעתיד זה אמור להשתמש בmmap ובptreads ואולי להיות יותר דומה לשרת http.) תודה.
הקדמה: עשיתי שרת קטן שמאזין לפורט מסויים עם listen, וכשaccept חוזר, הוא פותח תהליך חדש (fork) שמטפל בוא. אני רוצה עכשיו להעביר מידע מקובץ לfd שקיבלתי מהaccept ולסגור את התהליך שיצרתי. בסדר. העברתי את המידע עם read מהקובץ וsend(client_fd, buf, count, 0) (אפשר גם להשתמש בwrite...) ללקוח. אחרי זה אני סוגר את את הfd של הלקוח, ויוצא מהתוכנית. הבעיה: הבעיה היא שאם אני ישר סוגר את הfd של הלקוח, לפעמים חלק מהמידע לא מגיע ללקוח (אף על פי שsend אמור להיות block, ולפי מהערך החזרה שלו, הכל נשלח). בשביל "לתקן" את הבעיה אני צריך לעשות sleep לפני שאני סוגר את הfd של הלקוח בשביל שהתהליך יסיים להעביר לו את כל המידע. למה זה ככה? מה עשיתי לא נכון? (התוכנית הזאת אמורה להיות התחלה של שרת http בסיסי מאוד. בעתיד זה אמור להשתמש בmmap ובptreads ואולי להיות יותר דומה לשרת http.) תודה.