Вероятно, необходимо начать с нахождения причины того, что они были из синхронизации. Возможно, они не, и сценарий является неправильным. При создании мира из некоторых случайных источников, это могло бы все еще быть вне синхронизации. Чтобы быть уверенными, Вы создали бы и установили бы и мир и ядро из того же источника, выполняющего шаги из Руководства. Источники с CD могли работать хорошо, но понижающий успешно не гарантируется, и мы не знаем деталей.
Это не точно ответ, начиная с него, doens't непосредственно решают Вас проблема..., но выглядит, как будто Ваша проблема конкретна к хитрости. Таким образом, на моем OS X 10,6 систем у меня есть та же проблема, Вы делаете использование кода хитрости от Вас пример. С другой стороны, следующее работает просто великолепно:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('127.0.0.1', 8080))
s.listen(5)
c, addr = s.accept()
c.send('hello\n')
c.close()
Если я выполняю этот код, я вижу, что сокет слушает:
netstat -f inet -an | grep 8080
tcp4 0 0 127.0.0.1.8080 *.* LISTEN
И соединение с портом 8080 делает то, что Вы ожидали бы:
$ telnet localhost 8080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
Connection closed by foreign host.
Действительно, в моём случае проблема в неинициализированных полях структуры, которые не имеют ничего общего с адресом семантического сокета.
Я добавил memset(&sa, 0, sizeof sa)
и теперь он связывается.
Почти наверняка реализация Guile столкнулась с той же проблемой: инициализируя только задокументированные поля struct sockaddr_in
. В любом случае, симптомы были точно такими же: INADDR_ANY
связывание, но INADDR_LOOPBACK
отказ с тем же errno
.
Edit: извините, если я неясен; я имею в виду то, что я добавил к вопросу, который кто-то удалил. А именно, я столкнулся с точно такой же проблемой при реализации (по стечению обстоятельств) другого диалекта Lisp. Я добавил свои наблюдения вместе со следами отладочной сессии gdb
, показывающими содержимое структуры sockaddr_in до вызова bind
. В адресе правильно инициализированы поля sin_family
, sin_addr
и sin_port
. Однако поле sin_len
во главе структуры (присутствующее на Darwin, отсутствующее на других платформах) было неинициализировано, так же как и массив прокладок sin_zero
в конце.