Re: [問題] non-blocking socket問題
→ pcjustin:server有用fork或pthread處理連線嗎? 01/10 17:00
→ purincess:send傳回的值不到buffer的長度不是應該從沒傳完的部分 01/10 22:43
→ purincess:開始重新send嗎 OAO... 01/10 22:43
推 yvb:幾個問題: (1) server產生資料和client消化資料的速率各如何? 01/11 02:47
→ yvb: (2) client收到不完整的資料會如何處理? 01/11 02:48
→ yvb: (3) server是否有檢查和處理不完整送出的資料? 01/11 02:51
→ yvb: (4) 若是tcp連線, 是否使用了 setsockopt()設定TCP_NODELAY? 01/11 02:54
→ yvb:其中 (2) 改為 ...收到不完整/格式不正確的資料... 01/11 02:58
不好意思因為要補充的比較多所以用回覆了
回pcjustin: 沒有耶 select完後就開始處理 處理完就下一輪的select
回purincess: 我的程式比較單純 所以現在沒有考慮這些情況 是send完就繼續下去
不會從上次沒傳完的部分繼續
回yvb: 我每筆資料前面有一個自定義的header 所以client端可以做處理
只要server端每次要send的東西都有確實送出去就可以處理
譬如這次要送1000byte那呼叫send完後的回傳值確實是1000 這樣就不會有問題
如果要送1000bytes但是因為buffer問題讓回傳值少於1000 這樣就會後面全部亂掉
我有用TCP_NODELAY 可是我不太清楚這到底是什麼功能 有搜尋過後也是看不太懂意思
我該拿掉嗎
我想到的方法是在send前先檢查socket buffer還剩多大 如果夠容納這次要send的長度
就send 不夠的話就乾脆別send等下次的資料來再檢查buffer大小
一筆沒send的話不會怎樣就是少了一筆資料而已
不過還不知道socket buffer勝於大小要怎麼查 還在找@@
感謝各位的回覆 寫server程式還真的不是件容易的事阿
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.7.57
→
01/13 11:35, , 1F
01/13 11:35, 1F
→
01/13 13:12, , 2F
01/13 13:12, 2F
推
01/22 13:20, , 3F
01/22 13:20, 3F
→
01/22 13:21, , 4F
01/22 13:21, 4F
→
01/22 13:23, , 5F
01/22 13:23, 5F
→
01/22 13:26, , 6F
01/22 13:26, 6F
→
01/22 13:28, , 7F
01/22 13:28, 7F
→
01/22 13:30, , 8F
01/22 13:30, 8F
→
01/22 13:33, , 9F
01/22 13:33, 9F
→
01/22 13:35, , 10F
01/22 13:35, 10F
→
01/22 13:36, , 11F
01/22 13:36, 11F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):