Ответ 1
Не хотите оскорблять вас, но, похоже, вы не понимаете основ сетей TCP/IP. Функции socket_ не помогут вам справиться с прокси SOCKS, поскольку у них нет клиента SOCKS.
Функция socket_bind() предназначена для установки адреса источника для соединения. Не для привязки к удаленной службе. В основном вы указываете, что ваш сокет отображается как 127.0.0.1:9150, и он жалуется, поскольку у вас, вероятно, есть ваш прокси-сервер SOCKS. Даже если у вас будет доступ к этому адресу/порту, это не поможет: вы просто не можете подключиться с локального хоста в другом месте.
Правильное использование socket_bind() происходит после socket_create() и до socket_connect() - после установления соединения вы не можете изменить адрес источника.
С устранением этой проблемы вы можете обратиться к своей проблеме о том, чтобы "установить соединение с сокетом только через прокси". Честно говоря, ваш вопрос действительно расплывчато по деталям: чего вы хотите достичь? Вам нужен поток или вам просто нужно позвонить на какой-либо удаленный веб-сервер с запросом HTTP?
Учитывая ваше непонимание сокетов и что у вас есть "www.host.com", 8080 в вашем вопросе, я считаю, что вы ищете какую-то веб-страницу, вытащенную с сайта www.host.com:8080 через прокси SOCKS. В этом случае вам не нужно изобретать велосипед и использовать cURL: см. Как использовать прокси-сервер SOCKS 5 с cURL?
Если моя догадка была неправильной, и вам действительно нужен поток через прокси SOCKS, тогда вам понадобится внешняя библиотека, которая сделает это за вас. Там нет стандартного расширения PHP, которое сделает это за вас. Вы можете посмотреть https://github.com/clue/php-socks, чтобы получить потоки данных над SOCKS.