→ danny8376:EAGAIN就是叫你AGAIN啊 01/09 11:36
→ danny8376:non-blocking就兩種狀況 能馬上給出結果 所以給結果了 01/09 11:37
→ danny8376:這時跟一般socket沒啥差別 另一種狀況就是還沒結果 01/09 11:37
→ danny8376:這時就丟出EAGAIN 叫你晚點再來試 看到時會不會有結果 01/09 11:38
→ neko0624:請問是哪兩種狀況? 那我遇到EAGAIN的時候要什麼時候再回 01/09 12:01
→ neko0624:來看?下次呼叫send的時候嗎. 所以是不是我遇到EAGAIN就 01/09 12:02
→ neko0624:不理他就好了 01/09 12:02
推 wuliou:反正C語言通常return 0以外都是出錯啦 01/09 14:23
→ wuliou:non-blocking就是用try的 不成功就return err 01/09 14:24
→ wuliou:不會卡在那邊 01/09 14:24
→ neko0624:謝謝 server這邊搞定了 卻變成client端收到的資料有問題 01/09 16:23
→ neko0624:程式跑約0.5秒後 收到的資料欄位會亂掉 跟著程式就掛掉了 01/09 16:24
→ neko0624:請問會不會是send端的buffer滿了的關係?我該如何除錯呢 01/09 16:24
→ neko0624:因為資料都是固定長度的 所以欄位會亂掉除了send端的 01/09 16:31
→ neko0624:buffer overflow外 我想不出其他可能性 :( 01/09 16:32
推 yvb:前面 w大的 "C語言通常return 0以外都是出錯" 怎解?? 01/09 18:34
→ yvb:什麼 open(), send(), printf() ... 大於 0 也都是對啊... 01/09 18:37
→ yvb:回原PO, 若是 server client 不同台, 試著抓封包出來看吧... 01/09 18:38
→ yvb:或是收送兩端都把資料先 dump 出來, 再做後續處理... 01/09 18:42
→ yvb:應該可以協助 debug 看看收送過程發生什麼事... 01/09 18:43
→ neko0624:我把server端每次send的回傳值印出來 因為長度是固定的 01/09 19:19
→ neko0624:果然每次都是正確的長度 然後約0.5秒後就會長度變少 01/09 19:20
→ neko0624:然後client端就爆了 所以應該是buffer的問題囉 01/09 19:20
→ neko0624:我的資料流量約4xxKB/s 我明天試試看把buffer加大 01/09 19:21
→ neko0624:不好意思 這是我的第一隻server程式 所以問題比較基本 01/09 19:22
推 AstralBrain:buffer加大只會讓你晚幾秒死 不要這樣做 01/09 20:31
推 AstralBrain:blocking socket會卡 表示你的頻寬可能撐不住這個流量 01/09 20:39
→ AstralBrain:用什麼方式送都一樣沒救 01/09 20:40
推 timTan:會python 的話,可以試 twisted 01/09 23:26
→ neko0624:是喔 可是server跟client的網卡跟線路應該都稱的住這流量 01/10 00:07
→ neko0624:一秒4xxKB/s而已 我想會不會是send太頻繁(一秒300多次) 01/10 00:08
推 AstralBrain:那應該有其他原因讓流量到不了400kB 01/10 13:32
→ 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