
有人提交办法了.下一版应该就正常了.
int inet_mypton( int af, const char* src, void* dst){ if (af == AF_INET) { BYTE* ip = ( BYTE* )dst; int k = 0, x = 0; char ch; for (int i = 0; (ch = src[i]) != 0; i++) { if (ch == '.') { ip[k++] = x; if (k == 4) return 0; x = 0; } else if (ch < '0' || ch > '9') return 0; else x = x*10+ch-'0'; if (x > 255) return 0; } ip[k++] = x; if (k != 4) return 0; } else if (af == AF_INET6) { unsigned short* ip = ( unsigned short* )dst; int i; for (i = 0; i < 8; i++) ip[i] = 0; int k = 0; unsigned int x = 0; char ch; int marknum = 0; for (i = 0; src[i] != 0; i++) if (src[i] == ':') marknum++; for (i = 0; (ch = src[i]) != 0; i++) { if (ch == ':') { x = ((x&0xFF00)>>8)|((x&0x00FF)<<8); ip[k++] = x; if (k == 8) return 0; x = 0; if (i>0 && src[i-1] == ':') k += 7-marknum; } else if (ch >= '0' && ch <= '9') x = x*16+ch-'0'; else if (ch >= 'a' && ch <= 'f') x = x*16+ch-'a'+10; else if (ch >= 'A' && ch <= 'F') x = x*16+ch-'A'+10; else return 0; if (x > 0xFFFF) return 0; } x = ((x&0xFF00)>>8)|((x&0x00FF)<<8); ip[k++] = x; if (k != 8) return 0; } return 1;}
int inet_mypton( int af, const char* src, void* dst){ if (af == AF_INET) { BYTE* ip = ( BYTE* )dst; int k = 0, x = 0; char ch; for (int i = 0; (ch = src[i]) != 0; i++) { if (ch == '.') { ip[k++] = x; if (k == 4) return 0; x = 0; } else if (ch < '0' || ch > '9') return 0; else x = x*10+ch-'0'; if (x > 255) return 0; } ip[k++] = x; if (k != 4) return 0; } else if (af == AF_INET6) { unsigned short* ip = ( unsigned short* )dst; int i; for (i = 0; i < 8; i++) ip[i] = 0; int k = 0; unsigned int x = 0; char ch; int marknum = 0; for (i = 0; src[i] != 0; i++) if (src[i] == ':') marknum++; for (i = 0; (ch = src[i]) != 0; i++) { if (ch == ':') { x = ((x&0xFF00)>>8)|((x&0x00FF)<<8); ip[k++] = x; if (k == 8) return 0; x = 0; if (i>0 && src[i-1] == ':') k += 7-marknum; } else if (ch >= '0' && ch <= '9') x = x*16+ch-'0'; else if (ch >= 'a' && ch <= 'f') x = x*16+ch-'a'+10; else if (ch >= 'A' && ch <= 'F') x = x*16+ch-'A'+10; else return 0; if (x > 0xFFFF) return 0; } x = ((x&0xFF00)>>8)|((x&0x00FF)<<8); ip[k++] = x; if (k != 8) return 0; } return 1;}