ホントに、共有SSLってのも善し悪しです。というか、頼むから冗長化して欲しいです。
という話とは別で、まだarpingの件、引きずってたりします。
実はその、親アプリから引き渡される引数に想定外のパターンがあったりして・・・
IPアドレスを引き渡すとき、1つのオブジェクト→普通に渡される。
複数のオブジェクト→カンマ区切りで渡される。
特殊なオブジェクト→意味不明な文字列が・・・。
とりあえず、カンマ区切りのだけでも対処を・・・と思って
token = strtok_s(argv[i], ",", &nexttoken);こんな感じで、複数IPアドレスが渡されたときの対処をしてみた。
while(token != NULL) {
ipaddr = inet_addr(token);
if(maxIp < MAX_IP) {
if(ipaddr == 0 || htonl(ipaddr) >= INETADDR_MULTICAST) {
printf("ip address!?. %s = %x¥n", argv[i], ipaddr);
return -1;
}
IPAddrList[maxIp] = ipaddr;
maxIp++;
} else {
printf("ip address too many then %d.¥n", MAX_IP);
return -1;
}
token = strtok_s(NULL, ",", &nexttoken);
}
気になるのが、main()の肥大化。
引数の処理なんか全部main()内でやってるせいもあって、main()の長さが160行もある。
いい加減、このへんも直さねば・・・と思ってるけど、なんせ時間がない!っつーのが実情だったりする。
ちょっと面白いなとか思ってるのが、Windowsにはinet_addr()はあってもinet_atonは無かったりすることだ。wsprintf()だのstrcpy()だのは全部、wsprintf_s()とかstrcpy_S()に直せとかコンパイル時に五月蠅くいってくるのだけれど。(_s付きがセキュリティ面から改善した関数らしい)inet_addr()は昔のままだ。
・・・といっても、不正なStringを与えたときの戻り値が0xffffffffになる事で、255.255.255.255をうまく扱えないのがダメなだけだと思うが。
コメント