Честно говоря, я многое не понял что ты имеешь ввиду)
Валидность IP это прерогатива вызывающего, если ему это нужно, то он может конечно использовать и регулярные выражения. В общем оставим это на совести скриптера.
По поводу массива в функции со sscanf, то тут выбор сделан в пользу
скорости, ибо читабельность сохраняется.
Все что касается сдвигов, то тут никаких проблем нет.
Благодарю за здоровую критику.
- - - Добавлено - - -
Да, пожалуй ты прав, что strval здесь не лучшее решение.
Что касается возврата ошибок, то я не думаю что стоит каждый раз проверять валидность IP. Лучше это делать в другом месте. Функция лишь выполняет то зачем и вызывается.