El segundo parametro de bind es solo de entrada y listen no lo pide por lo tanto no hay ninguna modificacion y sigue siendo 0 por la asignacion que le haces antes de llamar a las funciones bind y listen.
Siguiendo tu codigo podes probar esto:
Código:
int len = sizeof(sin);
if (!getsockname(iSocket, (struct sockaddr *)&sin, &len))
{
printf("MY PUERTO AUTOMATICO |%d|\n", ntohs(sin.sin_port) );
}