溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

【bug-004】【tcp】網(wǎng)絡(luò)斷開(kāi)重連后,客戶端recv函數(shù)一直阻塞,不會(huì)返回

發(fā)布時(shí)間:2020-06-22 07:40:04 來(lái)源:網(wǎng)絡(luò) 閱讀:403 作者:石之灣 欄目:軟件技術(shù)

【前提】客戶端采用tcp阻塞模式
【現(xiàn)象】與相機(jī)設(shè)備建立連接后,偶爾出現(xiàn)幾次突然就收不到相機(jī)發(fā)過(guò)來(lái)的數(shù)據(jù);幾經(jīng)排查,懷疑跟網(wǎng)絡(luò)波動(dòng)有關(guān),于是通過(guò)插拔網(wǎng)線來(lái)模擬網(wǎng)絡(luò)波動(dòng),果然bug復(fù)現(xiàn)。

【分析】為什么網(wǎng)絡(luò)中斷tcp不主動(dòng)通知應(yīng)用程序呢?這涉及到TPC/IP協(xié)議的一個(gè)設(shè)計(jì)原則,即終端對(duì)終端參數(shù)。什么意思呢?就是由調(diào)用層選擇是否需要這種功能,如果需要,調(diào)用者就自己設(shè)置相應(yīng)參數(shù),而不是tcp一檢測(cè)到網(wǎng)絡(luò)中斷就及時(shí)反饋,因?yàn)榇蠖鄶?shù)的應(yīng)用程序并不需要即時(shí)的通知。
ps:我們自己設(shè)計(jì)接口的時(shí)候也應(yīng)該考慮這種原則。

【解決方案】
1、換成非阻塞模式;
2、阻塞+?;?。
這樣,就可以利用函數(shù)返回值來(lái)判斷是否需要重連了。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI