【发布时间】:2015-11-20 02:57:04
【问题描述】:
我想直接使用 ruby Socket 类,TCPSocket 不是一个选项。 代码:
require 'socket'
include Socket::Constants
socket = Socket.new :INET, :STREAM, 0
socket.bind (Socket.pack_sockaddr_in 2200, 'localhost')
错误:
`bind':使用了与请求的协议不兼容的地址。 (Errno::EAFNOSUPPORT)
我在 Windows 机器上使用 ruby 1.9.3。
额外信息:
Socket.pack_sockaddr_in(2200, 'localhost')
=> "\x17\x00\b\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x01\x00\x00\x00\x00"
主机文件:
# localhost 名称解析在 DNS 本身内处理。
# 127.0.0.1 本地主机
# ::1 本地主机
【问题讨论】:
-
我认为在 Windows 中使用
Socket.pack_sockaddr_in 2200, 'localhost'返回的地址有些奇怪。这就是我在 linux 上返回的内容=> "\x02\x00\b\x98\x7F\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00" -
@Rico 我将 sockaddr_in 的输出添加到我的问题中。与您的相比,它的字节数更少。会不会是 IPV4、IPV6 不匹配?
-
是的,试试我在回答中的内容。
-
@texasbruce 将我的主机文件中的内容添加到问题中。有 2 个条目,但被注释掉了。