FastNetMon

Friday, 3 July 2009

could not bind to address 0.0.0.0:80

Как бороться с такой траблой без ребута:

Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down


Заранее известно, что процессы апача все убиты, а других приложений, юзающих 80й порт нету. Просто апача упала, но не освободила сокет :/

24 comments :

  1. Мож тебе TUX(браузер уровня ядра) мешается, попробуй его грохнуть, чтоб апачу не мешал.
    или вот http://frankmash.blogspot.com/2005/11/address-already-in-use-makesock-could.html
    или может грохнуть в конфиге Listen 80

    ReplyDelete
  2. Я же сказал, что это точно не процесс занимает, это просто не освобожденный сокет :/

    ReplyDelete
  3. Паш, если это не освобожденный сокет, то наверное тупо ждать таймаута. А то мож у тебя там всетаки какойнить skype порт занимает?)))

    Как вариант попробовать в конфиге апачи сделать
    Listen [твой реальный ип, а не 127.0.0.1 или 0.0.0.0]:80

    Кстати, netstat -lnp | grep '0.0.0.0:80' ченить выдает?
    А то мож там кто сидит.

    ReplyDelete
  4. Это все проверено тысячу раз, софтины нету. Но сокет занят ^__^ и lsof говорит, что правда никого нету :)

    ReplyDelete
  5. А есть ли возможность может написать программулину на C+ которая бы сокет освобождала...

    ReplyDelete
  6. Один из вариантов, но все же считаю, что есть стандартный механизм для этого.

    ReplyDelete
  7. Ну если что, вот про Перл и сокеты
    http://www.opennet.ru/base/dev/perl_socket2.txt.html

    ReplyDelete
  8. Вообще говоря челу с аналогичной проблемой помогло вот это http://opennet.ru:8101/openforum/vsluhforumID8/1472.html

    ReplyDelete
  9. Кстати, если после остановки апача сделать killall -9 httpd, а потом перезапустить апачу?

    ReplyDelete
  10. Так поможет, у нас есть приложение которое точно так же себя ведет. После падения, убивать приходится.

    ReplyDelete
  11. tcp_tw_recycle - BOOLEAN
    Enable fast recycling TIME-WAIT sockets. Default value is 0.
    It should not be changed without advice/request of technical
    experts.

    tcp_tw_reuse - BOOLEAN
    Allow to reuse TIME-WAIT sockets for new connections when it is
    safe from protocol viewpoint. Default value is 0.
    It should not be changed without advice/request of technical
    experts.

    ReplyDelete
  12. мне помогло: fuser -k -n tcp 80

    убивает все что держит 80 порт

    ReplyDelete
    Replies
    1. И мне помогло. убил процессы и запустил нужный. теперь надо найти, где запускаются эти процессы.

      Delete
  13. У меня проблема решилась удалением лишней директивы Listen 80
    Поскольку она должна во всём конфиге быть только одна, а было несколько в файлах виртуальных хостов.

    ReplyDelete
  14. И такое бывает, ага. И крайне часто, кстати.

    ReplyDelete
  15. Проверить, занят ли порт 80 каким нибудь приложением в windows можно командой netstat -aon, в колонке local adress ищете 0.0.0.80, если его там нет - значит порт не занят, если есть смотрите колонку state и pid. В моем случае порт занимал Skype, state было listening, pid - 4316. PID - идентификатор процесса. Посмотреть что за процесс можно во вкладке Процессы диспетчера задач, перед этим во вкладке Вид->Выбрать столбцы включите "Идентификатор процесса (PID)". Skype закрыл - все работает.

    ReplyDelete
  16. К сожалению, тут Линукс и порт точно свободен, но "недоосвобожден".

    ReplyDelete
  17. Комменты рулят - помогло

    ReplyDelete
  18. Часто ценность комментариев много выше ценности самой статьи :)

    ReplyDelete
  19. Павел, спасибо! голову сломала пока пыталась решить эту проблему..

    ReplyDelete
  20. проблема решилась удалением лишней директивы Listen 80
    вопрос а как и где можно посмотреть есть ли лишнии директивы Listen 80 ???

    ReplyDelete
  21. Ребят, ответьте на последний вопрос - очень интерессно! Спасибо!!

    P.S. fuser -k -n tcp 80 помогло - кроме него - ничего не выгружало апачу с 80 порта

    ReplyDelete
  22. Спасибо комментариям. Была такая же ошибка, оказалось что на 80 сидит nginex, для апача в ports.conf прописал другие порты и заработало.

    ReplyDelete
  23. Под Windos10 так просто порт 80 не освободить, его занимает системная программа NT Kernel & System. Поменял в httpd.conf Port 80 (& ServerName & VirtualHost) на 3900 и все заработало. Этот номер порта был прописан в httpd.pid, который генерируется даже при неудачном запуске Apache.

    ReplyDelete

Note: only a member of this blog may post a comment.