首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

在linux2.6内核中为什么找不到地址转换函数inet_pton的实现?在很多FreeBSD的内核中却能够找到?该怎么处理

2012-04-11 
在linux2.6内核中为什么找不到地址转换函数inet_pton的实现?在很多FreeBSD的内核中却能够找到?在linux2.6

在linux2.6内核中为什么找不到地址转换函数inet_pton的实现?在很多FreeBSD的内核中却能够找到?
在linux2.6内核中为什么找不到inet_pton的实现?在很多FreeBSD的内核中却能够找到?
真的很疑惑,不知道这个inet_pton到底是在linux2.6内核的什么地方呢?不可能找不到的呀?FreeBSD的很多内核里却能找到。实现如下:

C/C++ code
#if defined(LIBC_SCCS) && !defined(lint)   19 static const char rcsid[] = "$Id: inet_pton.c,v 1.3.18.2 2005/07/28 07:38:07 marka Exp $";   20 #endif /* LIBC_SCCS and not lint */   21 #include <sys/cdefs.h>   22 __FBSDID("$FreeBSD: head/sys/libkern/inet_pton.c 213103 2010-09-24 15:01:45Z attilio $");   23    24 #include <sys/param.h>   25 #include <sys/socket.h>   26 #include <sys/systm.h>   27    28 #include <netinet/in.h>   29    30 #if __FreeBSD_version < 700000   31 #define strchr index   32 #endif   33    34 /*%   35  * WARNING: Don't even consider trying to compile this on a system where   36  * sizeof(int) < 4.  sizeof(int) > 4 is fine; all the world's not a VAX.   37  */   38    39 static int      inet_pton4(const char *src, u_char *dst);   40 static int      inet_pton6(const char *src, u_char *dst);   41    42 /* int   43  * inet_pton(af, src, dst)   44  *      convert from presentation format (which usually means ASCII printable)   45  *      to network format (which is usually some kind of binary format).   46  * return:   47  *      1 if the address was valid for the specified address family   48  *      0 if the address wasn't valid (`dst' is untouched in this case)   49  *      -1 if some other error occurred (`dst' is untouched in this case, too)   50  * author:   51  *      Paul Vixie, 1996.   52  */   53 int   54 inet_pton(int af, const char *src, void *dst)   55 {   56         switch (af) {   57         case AF_INET:   58                 return (inet_pton4(src, dst));   59         case AF_INET6:   60                 return (inet_pton6(src, dst));   61         default:   62                 return (-1);   63         }   64         /* NOTREACHED */   65 }   66    67 /* int   68  * inet_pton4(src, dst)   69  *      like inet_aton() but without all the hexadecimal and shorthand.   70  * return:   71  *      1 if `src' is a valid dotted quad, else 0.   72  * notice:   73  *      does not touch `dst' unless it's returning 1.   74  * author:   75  *      Paul Vixie, 1996.   76  */   77 static int   78 inet_pton4(const char *src, u_char *dst)   79 {   80         static const char digits[] = "0123456789";   81         int saw_digit, octets, ch;   82 #define NS_INADDRSZ     4   83         u_char tmp[NS_INADDRSZ], *tp;   84    85         saw_digit = 0;   86         octets = 0;   87         *(tp = tmp) = 0;   88         while ((ch = *src++) != '\0') {   89                 const char *pch;   90    91                 if ((pch = strchr(digits, ch)) != NULL) {   92                         u_int new = *tp * 10 + (pch - digits);   93    94                         if (saw_digit && *tp == 0)   95                                 return (0);   96                         if (new > 255)   97                                 return (0);   98                         *tp = new;   99                         if (!saw_digit) {  100                                 if (++octets > 4)  101                                         return (0);  102                                 saw_digit = 1;  103                         }  104                 } else if (ch == '.' && saw_digit) {  105                         if (octets == 4)  106                                 return (0);  107                         *++tp = 0;  108                         saw_digit = 0;  109                 } else  110                         return (0);  111         }  112         if (octets < 4)  113                 return (0);  114         memcpy(dst, tmp, NS_INADDRSZ);  115         return (1);  116 }

我现在钻牛角尖的一个问题是,为什么在linux2.6内核中找不到呢?(我尝试了好几种方法找,1 把linux2.6内核源码下载下来找 2. 在http://fxr.watson.org/fxr/source/libkern/inet_pton.c#L54也找不到)



[解决办法]
http://lxr.linux.no/#linux+v3.3/net/core/utils.c#L114

搜了个 不知道是不是
[解决办法]
lz 的代码时libc中的代码
http://www.freebsd.org/cgi/cvsweb.cgi/src/lib/libc/inet/inet_pton.c?rev=1.3.10.1.8.1;content-type=text%2Fplain

热点排行