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

文档序号:9711408阅读:来源:国知局
2隧道对应的文件描述符应当在fdl3隧道对应的文件描述符之 前。fdl2隧道对应的文件描述符为select函数的监听序列之后的第一个文件描述符,因此 其偏移量可以为〇,相应地,fd 13隧道对应的文件描述符的偏移量可以为1,以此类推。确定 了文件描述符的偏移量后,便可以在所述select函数的监听序列的长度的基础上增加确定 的所述偏移量,生成所述分配至select函数的监听序列之后的文件描述符的索引。所述 select函数的监听序列中的文件描述符是从O至1023,所述select函数的监听序列的长度 便为1024,那么在所述select函数的监听序列的长度的基础上增加确定的所述偏移量,便 可以得到fdl2隧道对应的文件描述符的索引为1024+0 = 1024,fdl3隧道对应的文件描述符 的索引为1024+1 = 1025。
[0056]具体地,所述select函数的监听序列之后的文件描述符的索引可以如表1所示:
[0059] 在表1中,各个文件描述符的使用状态同样被标注出来,1则代表该文件描述符已 经被使用,〇则代表该文件描述符没有被使用。通过这样的方式,便可以完成256条隧道的建 立。
[0060] 以上所述的方案适用于select函数监听序列中的文件描述符总长度小于或者等 于监听序列的长度,即当满足预设的监听条件的文件描述符的总长度小于或等于所述 select函数的监听序列的长度时,可以直接将所述socket对应的文件描述符分配至初始内 存中,但是如果利用本发明的技术方案后,满足预设的监听条件的文件描述符的总长度大 于所述s e I ect函数的监听序列的长度,那么所述方法还可以包括以下步骤:
[0061] 为所述select函数的监听序列重新分配内存,以确保重新分配的内存长度大于或 者等于满足预设的监听条件的文件描述符的总长度;
[0062] 将所述select函数的监听序列占用的初始内存中的文件描述符复制到重新分配 的内存中。
[0063] 具体地,本发明实施例可以重新定义数据结构,例如:
[0064] typedef struct
[0065] {
[0066] long*fds_bits;
[0067] int fds_size;
[0068] }fd_ set-2;
[0069] 初始化fds_size = 1024表示select函数初始的监听序列长度是1024位,如果fd的 总长度大于1024,那么需要重新分配内存给select函数的监听序列,以确保重新分配的内 存长度大于或者等于满足预设的监听条件的文件描述符的总长度。另外,可以将所述 se I ect函数的监听序列占用的初始内存中的文件描述符复制到重新分配的内存中。这样, 之前分配至初始内存中的文件描述符均可以被复制到重新分配的内存中,后续加入的文件 描述符则可以在已经分配的文件描述符之后继续累加,这样便保证了数据的完整性。如果 需要select函数监听的fd大于1024个,采用重新定义fds_set的数据结构,并重新分配大于 1024bit的内存,来实现select的监听,使得大于1024的fd需要select监听的实现成为了可 能。本发明中需要自定义头文件,不引用__FD_SETSIZE宏。__FD_SETSIZE宏是Iinux下的库 函数,如果select函数改了,那么其他使用__FD_SETSIZE宏的地方都需要进行修改。而本发 明中处理时使用自定义的头文件,不引用Iinux下库函数_FD_SETSIZE宏。
[0070] 另外,在本发明一优选实施例中,为了合理利用空余的内存,在将初始内存中的文 件描述符复制到重新分配的内存中后,本发明实施例可以释放所述select函数的监听序列 占用的初始内存,以保证内存的合理利用。
[0071] 本发明实施例还提供一种应用于L2TP中的数据处理装置。图2为本发明实施例提 供的一种应用于L2TP中的数据处理装置功能模块图。如图2所示,所述装置可以包括:
[0072] Socket建立单元100,用来响应于创建L2TP隧道的请求,建立预设数量的socket; [0073]判断单元200,用来判断所述socket对应的文件描述符的类型是否满足预设的监 听条件;
[0074]第一分配单元300,用来当所述socket对应的文件描述符的类型满足预设的监听 条件,将所述socket对应的文件描述符分配至能够容纳所述文件描述符的select函数的监 听序列中;
[0075]第二分配单元400,用来当所述socket对应的文件描述符的类型不满足预设的监 听条件,将所述socket对应的文件描述符分配至select函数的监听序列之后。
[0076]在本发明一优选实施例中,所述判断单元200具体包括:
[0077] 收发数据包判断子模块,用来判断所述socket对应的文件描述符是否需要收发数 据包;
[0078] 第一确定子模块,用来当所述socket对应的文件描述符需要收发数据包时,确定 所述socket对应的文件描述符的类型满足预设的监听条件;
[0079] 第二确定子模块,用来当所述socket对应的文件描述符不需要收发数据包时,确 定所述socket对应的文件描述符的类型不满足预设的监听条件。
[0080] 在上述技术方案的基础上,作为一种优选的【具体实施方式】,本发明实施例提供的 应用于L2TP中的数据处理装置还包括:
[0081] 索引确定单元,用来根据所述select函数的监听序列的长度,为分配至select函 数的监听序列之后的文件描述符确定索引。
[0082] 在本发明一优选实施例中,所述索引确定单元具体包括:
[0083]偏移量确定子模块,用来根据预设顺序,确定分配至select函数的监听序列之后 的文件描述符的偏移量;
[0084]索引生成子模块,用来在所述select函数的监听序列的长度的基础上增加确定的 所述偏移量,生成所述分配至select函数的监听序列之后的文件描述符的索引。
[0085] 在本发明另一优选实施例中,当满足预设的监听条件的文件描述符的总长度大于 所述select函数的监听序列的长度时,所述第一分配单元具体包括:
[0086] 内存分配子模块,用来为所述select函数的监听序列重新分配内存,以确保重新 分配的内存长度大于或者等于满足预设的监听条件的文件描述符的总长度;
[0087] 复制子模块,用来将所述select函数的监听序列占用的初始内存中的文件描述符 复制到重新分配的内存中。
[0088] 在上述技术方案的基础上,作为一种优选的【具体实施方式】,本发明实施例提供的 应用于L2TP中的数据处理装置还包括:
[0089] 内存释放单元,用来在复制子模块将所述select函数的监听序列中的文件描述符 复制到重新分配的内存中之后,释放所述select函数的监听序列占用的初始内存。
[0090] 上述本发明实施例中各个功能模块的工作原理与步骤Sl至S3中一致,这里便不再 赘述。
[0091] 本发明实施例提供的一种应用于L2TP中的数据处理方法及装置,提出了在select 函数监听的1024的比特位的后面扩展任意多个比特位。这样使得原来select函数监听只能 处理1024个fd的缺点得到了优化。如果上述提到的客户端需要建立256个隧道,每个隧道需 要5个fd,那么至少需要有256*5= 1280个比特位,所以select函数的1024个比特位就不能 处理该业务。扩展后的bit位能够使得该用户的需求得到满意的处理。
[0092] 同时本发明实施例在扩展select函数的比特位的基础上又提出了select函数后 面的比特位和fd的管理,其中比特位的管理是采用与select函数监听里面的比特位的形式 一致的,这样可以使1024后面的比特位的管理能够准确有序的管理好。其中fd的管理采用 了索引的形式,该索引是1024+偏移量。这样不但能够有效的解决用户的需求,还能够使开 发人员在编写代码的时候能够容易理解和操作。另
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1