Согласно сообщению об ошибке, запущен какой-то другой процесс (вероятно, Apache, но может быть и другой HTTP-сервер), который прослушивает TCP-порт 80.
Первый шаг - определить этот процесс и остановить его.
Второй шаг - либо sudo
для запуска perforce, либо su
для root, а затем запустить perfoce, настроенный на прослушивание TCP-порта 80. Это необходимо сделать, потому что порты 1024 и ниже считаются "специальными", и только идентификатор пользователя root может открывать сокеты, привязанные к этим номерам портов.
Из справочной страницы Linux bind(2)
:
It is normally necessary to assign a local address using bind() before a SOCK_STREAM socket may receive connections (see accept(2)).
The rules used in name binding vary between address families. Consult the manual entries in Section 7 for detailed information. For AF_INET, see ip(7); for AF_INET6, see ipv6(7); for AF_UNIX, see unix(7); for AF_APPLETALK, see ddp(7); for AF_PACKET, see packet(7); for AF_X25, see x25(7); and for AF_NETLINK, see netlink(7).
А для IPv4 на справочной странице ip(7)
говорится:
When a process wants to receive new incoming packets or connections, it should bind a socket to a local interface address using bind(2). In this case, only one IP socket may be bound to any given local (address, port) pair. When INADDR_ANY is specified in the bind call, the socket will be bound to all local interfaces. When listen(2) is called on an unbound socket, the socket is automatically bound to a random free port with the local address set to INADDR_ANY.
Таким образом, может показаться, что для сокетов IPv4 TCP или UDP IP-адрес для привязки должен быть либо INADDR_ANY
, либо одним из IP-адресов, назначенных любому из сетевых интерфейсов в локальной системе.
Но там же сказано:
There are several special addresses: INADDR_LOOPBACK (127.0.0.1) always refers to the local host via the loopback device; INADDR_ANY (0.0.0.0) means any address for binding; INADDR_BROADCAST (255.255.255.255) means any host and has the same effect on bind as INADDR_ANY for historical reasons.
Итак, привязка к 255.255.255.255 действительна и имеет тот же эффект, что и 0.0.0.0, но в современных реализациях предпочтительнее 0.0.0.0.
И если вы установите параметр сокета IP_FREEBIND
, вы можете привязаться к любому адресу, в предположении, что привязанный -к адресу может появиться на каком-то локальном интерфейсе позднее. Однако до тех пор, пока это действительно не произойдет, сокет, связанный таким образом, может быть не очень полезен.
Linux также имеет параметр сокета SO_BINDTODEVICE
, который можно использовать для привязки сокета к определенному сетевому интерфейсу без указания его IP-адреса.