一种应用于l2tp中的数据处理方法及装置的制造方法

文档序号:9711408阅读:232来源:国知局
一种应用于l2tp中的数据处理方法及装置的制造方法
【技术领域】
[0001] 本发明涉及通信技术领域,尤指一种应用于第二层通道通信协定(L2TP,Layer 2Tunneling Protocol)中的数据处理方法及装置。
【背景技术】
[0002] 在L2TP组网中,往往利用select函数来确定一个或多个套接口的状态。对每一个 套接口,调用者可查询它的可读性、可写性及错误状态信息。具体地,可以用fd_set结构来 表示一组等待检查的套接口,在调用返回时,这个结构存有满足一定条件的套接口组的子 集,并且select函数返回满足条件的套接口的数目。
[0003] 现有技术中,在Iinux系统中有一组宏可用于对fd_set的操作,具体如下所示:
[0004] ?define FD_SETSIZE_FD_SETSIZE
[0005] #define_FD_SETSIZE 1024
[0006] -NFDBITS(8*(int)sizeof(-fd_mask))
[0007] typedef-fd_mask fd_mask;
[0008] typedef long int-fd_mask;
[0009] 由于 sizeof (_fd_mask) = sizeof (long) =4 字节,一个字节为 8 位,那么 fds_bits [__FD_SETSIZE/__NFDBITS]; =Iong fds_bits[1024/32]; =Iong fds_bits[32],从而可 以使用1024个bit位。
[0010] fd_set的结构体为:
[0013] Select 函数为:
[0014] Int select(int nfds,fd_set*readfds,fd_set*writefds,fd_set*exceptfds, struct timeval*timeout);
[0015] 其中,nfds参数指定被监听的文件描述符的总数。它通常被设置为select函数监 听的所有文件描述符中的最大值加1,因为文件描述符是从〇开始计数的。另外,readfds、 writefds和exceptfds参数分别指向可读、可写和异常等事件对应的文件描述符集合。应用 程序调用select函数时,通过这三个参数传入自己感兴趣的文件描述符。select函数调用 返回时,内核将修改他们来通知应用程序哪些文件描述符已经就绪。这3个参数是fd_set结 构指针类型。fd_set结构体定义如上。
[0016] 在实施本发明的过程中,发明人发现现有技术至少存在如下问题:
[0017]由以上定义可见,fd_set结构体仅包含一个整形数组,该数组的每个元素的每一 位bit标记一个文件描述符。fd_set结构体能容纳的文件描述符数量由FD_SETSIZE指定,这 就限制了 select函数能同时处理文件描述符的总量。有时候需要访问的fd(即文件描述符) 数量比较多时,不能够达到开发人员的逾期结果。目前可以通过以下三种方法进行改进,但 是也同时会产生不同的缺陷:
[0018] 1、可以改__FD_SETSIZE的大小,但是由于select函数是Iinux下的库函数,如果仅 仅是为了自己当前模块的需要就去修改宏_FD_SETSIZE的大小,那么将会影响其他模块的 程序和运行,可能会使系统产生问题;
[0019] 2、可将fd_set结构进行封装,那么也是该模块能够正常使用,其他模块使用时由 于结构体里的变量不一样,就会出现其他模块的程序不好用;
[0020] 3、select函数监听可以换为别的函数如epoll函数等,那么该模块的代码改动会 比较大,会给开发人员带来很多的工作量。

【发明内容】

[0021] 为了解决上述技术问题,本发明提供了一种应用于L2TP中的数据处理方法及装 置,以扩展select函数监听的使用范围。
[0022]为了达到本发明目的,本发明提供了一种应用于L2TP中的数据处理方法,包括:响 应于创建L2TP隧道的请求,建立预设数量的socket;判断所述socket对应的文件描述符的 类型是否满足预设的监听条件;若满足,则将所述socket对应的文件描述符分配至能够容 纳所述文件描述符的select函数的监听序列中;若不满足,则将所述socket对应的文件描 述符分配至select函数的监听序列之后。
[0023]进一步地,所述判断所述socket对应的文件描述符的类型是否满足预设的监听条 件具体包括:判断所述socket对应的文件描述符是否需要收发数据包;若需要,则确定所述 socket对应的文件描述符的类型满足预设的监听条件;若不需要,则确定所述socket对应 的文件描述符的类型不满足预设的监听条件。
[0024] 进一步地,所述方法还包括:根据所述select函数的监听序列的长度,为分配至 select函数的监听序列之后的文件描述符确定索引。
[0025] 进一步地,所述根据所述select函数的监听序列的长度,为分配至select函数的 监听序列之后的文件描述符确定索引具体包括:根据预设顺序,确定分配至select函数的 监听序列之后的文件描述符的偏移量;在所述select函数的监听序列的长度的基础上增加 确定的所述偏移量,生成所述分配至select函数的监听序列之后的文件描述符的索引。
[0026]进一步地,所述将所述socket对应的文件描述符分配至能够容纳所述文件描述符 的select函数的监听序列中包括:当满足预设的监听条件的文件描述符的总长度大于所述 select函数的监听序列的长度时,为所述select函数的监听序列重新分配内存,以确保重 新分配的内存长度大于或者等于满足预设的监听条件的文件描述符的总长度;将所述 select函数的监听序列占用的初始内存中的文件描述符复制到重新分配的内存中。
[0027]进一步地,在将所述select函数的监听序列中的文件描述符复制到重新分配的内 存中的步骤之后,所述方法还包括:释放所述select函数的监听序列占用的初始内存。 [0028] 本发明还提供了一种应用于L2TP中的数据处理装置,包括:Socket建立单元,用来 响应于创建L2TP隧道的请求,建立预设数量的socket;判断单元,用来判断所述socket对应 的文件描述符的类型是否满足预设的监听条件;第一分配单元,用来当所述socket对应的 文件描述符的类型满足预设的监听条件时,将所述socket对应的文件描述符分配至能够容 纳所述文件描述符的select函数的监听序列中;第二分配单元,用来当所述socket对应的 文件描述符的类型不满足预设的监听条件时,将所述socket对应的文件描述符分配至 select函数的监听序列之后。
[0029]进一步地,所述判断单元具体包括:收发数据包判断子模块,用来判断所述socket 对应的文件描述符是否需要收发数据包;第一确定子模块,用来当所述socket对应的文件 描述符需要收发数据包,确定所述socket对应的文件描述符的类型满足预设的监听条件; 第二确定子模块,用来当所述socket对应的文件描述符不需要收发数据包,确定所述 socket对应的文件描述符的类型不满足预设的监听条件。
[0030] 进一步地,所述装置还包括:索引确定单元,用来根据所述select函数的监听序列 的长度,为分配至select函数的监听序列之后的文件描述符确定索引。
[0031 ]进一步地,所述索引确定单元具体包括:偏移量确定子模块,用来根据预设顺序, 确定分配至select函数的监听序列之后的文件描述符的偏移量;索引生成子模块,用来在 所述select函数的监听序列的长度的基础上增加确定的所述偏移量,生成所述分配至 select函数的监听序列之后的文件描述符的索引。
[0032] 进一步地,当满足预设的监听条件的文件描述符的总长度大于所述select函数的 监听序列的长度时,所述第一分配单元具体包括:内存分配子模块,用来为所述select函数
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1