Este código detecta se tal string é realmente um ip:porta válido ou não



int  cadeia1 ,  cadeia2,  cadeia3, cadeia4, porta;
 if (sscanf(string, "%d.%d.%d.%d:%d", &cadeia1, & cadeia2, &cadeia3, &cadeia4, &porta)  != 5 && (cadeia1 | cadeia2 | cadeia3 | cadeia4) > 255 || port > 0xFFFF




No caso, você também precisa checar se na string há apenas NÚMEROS-PONTOS

Espero que gostem, abraços !!