Если основная задача это получение данных по сети, то, как уже сказали выше, все равно все будет идти через сокеты. Так что скорость тут реально в пределах погрешности. Поэтому выбирать нужно исходя из удобства использования и задачи. file_get_contents с заданием контекста довольно высокоуровневый, подходит в принципе только для задачи "что-то получить из сети, таймаут на действия такой-то". Sockets напротив низкоуровневый. Позволяет очень многое, но требует хорошего понимания работы с сетью. cURL по середине. Он достаточно высокоуровневый что бы сказать ему "возьми вот этот тут" не погружаясь в тонкости установления соединения, но при этом позволяет подкручивать низкоуровневые места в случае надобности.
Т.е. принцип выбора достаточно прост: 1) нужно что-то получить из сети с возможность задать таймаут и результат "ответ получен ок"/"возникла проблема" и нужно запилить в одну строку, то file_get_contents; 2) нужно больше возможностей при установлении соединения, то cURL; 3) если точно известно, почему cURL не подходит, то начинаем использовать Sockets.