Если говорить о зарезервированных портах, то со стороны клиента нет ограничений на открытие соединения с такими портами, как это было продемонстрировано в предыдущем разделе, но для установки собственных серверных сценариев для этих портов необходимо иметь особые права доступа. На сервере, где находится мой сайт learning—python.com, например, порт 80 веб-сервера запрещен для использования простыми сценариями (если не входить в командную оболочку с использованием специальной учетной записи):
[…]$ python
> >> from socket import *
> >> sock = socket(AF_INET,SOCK_STREAM) # попробовать привязать порт 80
> >> sock.bind((», 80)) # на общем компьютере learning—python.com
Traceback (most recent call last):
File "<stdin>", line 1, in
File "<string>", line 1, in bind socket.error: (13, ‘Permission denied’) (socket.error: (13, ‘Недостаточно прав‘))
Даже если у пользователя будут все необходимые права, при выполнении этих инструкций будет возбуждено исключение, если порт уже используется действующим веб-сервером. Компьютеры, используемые как общие серверы, действительно резервируют эти порты. Это одна из причин, по которым для тестирования мы будем запускать собственный веб-сервер локально, когда начнем писать серверные сценарии далее в этой книге — программный код, представленный выше, выполняется без ошибок на компьютере в Windows, что позволяет нам экспериментировать с локальными веб-сайтами на отдельном компьютере: