开发者社区> 问答> 正文

管道通讯数据接收失败:报错

大家好:

    直接入主题,情况是这样的,有2个线程通过管道通讯,数据是固定的格式512字节,两端都通过select监听管道,处理流程是这样的:

    管道读事件回调--》申请内存,接收--》处理(可能存留很长一段时间)--》发送响应数据包,释放内存

    问题:

    从管道内读取数据的时候,是先接收到栈上面,然后申请内存在COPY,还是先申请内存在读取,如果内存申请失败该怎么处理?

    我现在的处理办法是先申请内存,在接收,如果申请失败直接abort()?

    如果是先接收到栈上面,如果申请内存失败,我还可以发送响应包告诉发送端内存申请失败了。因为数据包内带有ID,所以必须要把原数据包接收上来。

  

展开
收起
kun坤 2020-06-07 12:19:30 681 0
1 条回答
写回答
取消 提交回答
  • 一般情况内存是不会申请失败吧,内存不足还玩个屁啊。

    就这句:
    如果是先接收到栈上面,如果申请内存失败,我还可以发送响应包告诉发送端内存申请失败了。因为数据包内带有ID,所以必须要把原数据包接收上来

    既然你前面内存都申请失败了,那你告诉发送方的时候还是要申请一个字节缓存区保存发送的数据,这里又可能申请失败,难搞了吧

    ######我也是觉得内存申请失败是小概率事件,但是又是很棘手的事件,不检查返回值又不放心。对于这种小概率事件,我就直接打印,然后exit了。######

    我就关心一点。你的栈不是内存?先放到栈上,如果栈也放不了怎么办?。。

    先把发来的数据放栈,栈失败直接返回内存不足,否则从栈中取出数据处理,处理完成释放栈并返回流,不就完了,还要申请内存干嘛,多了一步操作。

    ######就和接收到一个http请求包一样,里面的数据有部分是需要原封不动的返回给发送端的。 请求也不是接收上来就可以直接处理,然后发送回去的。有一定的生命周期。 我指的栈,就是局部变量或者局部数组。
    2020-06-07 12:19:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
从“连接”到“交互” 立即下载
探索连接的最后十秒”落时”的网关 立即下载
低代码开发师(初级)实战教程 立即下载