Tôi nghĩ rằng một quy trình máy chủ web mà tôi đã đưa ra là nghe trên localhost: 8080 và đã cố gắng kết nối với nó, nhưng vẫn bị lỗi thiết lập lại kết nối. Hóa ra, tôi đã nhầm và quá trình của tôi đang lắng nghe trên một cổng hoàn toàn khác.
Tuy nhiên, điều tôi không thể hiểu là tại sao tôi lại gặp lỗi thiết lập lại kết nối, thay vì "từ chối kết nối" mà bạn thường nhận được nếu không có quá trình nào lắng nghe trên cổng đó. Không có gì khác nghe trên 8080 như tôi có thể nói:
$ sudo lsof -i -P | grep 8080
# no result
$ sudo netstat -a -n | grep 8080
# still no result
Tuy nhiên, các kết nối đến cổng này ban đầu được chấp nhận (mặc dù đã đóng trên dữ liệu tiếp theo):
$ /usr/local/bin/wget localhost:8080
--2014-01-14 16:29:22-- http://localhost:8080/
Resolving localhost... ::1, 127.0.0.1, fe80::1
Connecting to localhost|::1|:8080... failed: Connection refused.
Connecting to localhost|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... No data received.
Tương tự với telnet:
$ telnet localhost 8080
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Thử các cổng ngẫu nhiên khác chỉ dẫn đến lỗi kết nối dự kiến bị từ chối:
$ telnet localhost 8081
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Trying fe80::1...
telnet: connect to address fe80::1: Connection refused
telnet: Unable to connect to remote host
Tập tin máy chủ của tôi là xương trần:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
launchd
, với việclaunchd
đặt trước bất kỳ cổng nào. Xem câu trả lời của tôi ở đây (mặc dùlsof
dường như là sai). Một số tài liệu về hành vi này là trongman launchd.plist
khi tìm kiếmsocket
.