码迷,mamicode.com
首页 > 其他好文 > 详细

再看erlang的socket部分基础

时间:2016-05-26 18:40:25      阅读:802      评论:0      收藏:0      [点我收藏+]

标签:

socket的选项里面的{packet,0}和{packet,raw}的区别

{packet,2} erlang处理2字节大端包头
{packet,4} erlang处理4字节大端包头
{packet,0} erlang不负责拆包,用户自己处理
{packet,raw} erlang不负责拆包,用户自己处理,和{packet,0}的区别应该在于raw socket可以处理icmp之类的特殊包

 

粘包处理

自己处理粘包的时候,使用{active, N}(还没有到被动模式)和{active, true}选项的时候,在handle_info({tcp,Socket,Data}里面需要好好处理下粘包,
具体可以看下面的例子
https://github.com/kqqsysu/ssdb-erlang/blob/master/src/ssdb_conn.erl

 

关于在被动模式下以recv方式收包

如果是{packet,0}或者{packet, raw},需要指定recv的大小,否则会全部收取,收到的数据需要和原来拆包剩下的数据一起组合为新数据,重新循环拆包,无法去掉包头,因为包是自定义的,有没有包头都不知道
如果是{packet,x},x为124,则recv直接传0参数, 收到的数据是去掉1字节/2字节/4字节包头的业务数据

 

参考地址

 

再看erlang的socket部分基础

标签:

原文地址:http://www.cnblogs.com/ziyouchutuwenwu/p/5532061.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!