第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何能夠在某個client異常退出后,dispatcher打印出相關(guān)信息,同時能夠繼續(xù)運(yùn)行下去?

如何能夠在某個client異常退出后,dispatcher打印出相關(guān)信息,同時能夠繼續(xù)運(yùn)行下去?

蝴蝶不菲 2023-04-16 21:17:44
在linux環(huán)境下用C寫了一個程序socket程序,實現(xiàn)功能如下:一個dispatcher,多個client,dispatcher向client分發(fā)任務(wù),client完成后,將結(jié)果返回給dispatcher,dispatcher與client通過tcp連接問題是 當(dāng)其中一個client異常退出后,會導(dǎo)致dispathcer也退出。
查看完整描述

2 回答

?
桃花長相依

TA貢獻(xiàn)1860條經(jīng)驗 獲得超8個贊

建議把server從client收數(shù)據(jù)的那幾句貼出來。

多打一些log,確認(rèn)下到底是哪一步錯了。client掛掉不太可能會導(dǎo)致server也掛掉,我覺得應(yīng)該是你的實現(xiàn)邏輯有錯,比如說recv返回了-1(所以要打log),然后你沒有做好判斷,直接 buf[ret] = '\0' 寫了錯誤的內(nèi)存導(dǎo)致崩潰。

另外,開啟coredump可以幫助你調(diào)試。例如執(zhí)行ulimit -c 1024,然后用gcc/g++加上-g編譯,再用gdb載入server崩潰產(chǎn)生的core文件,執(zhí)行bt命令看看是哪一句出錯了。


查看完整回答
反對 回復(fù) 2023-04-20
?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊

之前dispatcher等待client結(jié)果的部分代碼:

struct net_header *ppackage = NULL;while(1)
{
    recv_package(sockfd, (struct net_header **)&ppackage, &recv_size);
    free(ppackage);
}

recv_package是對recv的簡單包裝,如果對端異常退出,ppackageNULL的,再去free,就出問題了。
現(xiàn)在改成:

if(recv_package(sockfd, (struct net_header **)&ppackage, &recv_size) == -1)
{    printf("dispatcher: recv error when waiting judge result.\n");    break;    //如果接收失敗,跳出循環(huán)}free(ppackage);

當(dāng)client退出后,dispather也能繼續(xù)運(yùn)行下去了。


查看完整回答
反對 回復(fù) 2023-04-20
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號