类:Mongo::Socket::TCP Private

继承:
Mongo::Socket 显示全部
定义于:
lib/ Mongo/socket/tcp.rb

Overview

此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。

TCP 套接字的包装器。

由于:

  • 2.0.0

常量摘要

Mongo::Socket继承的常量

SSL_ERRORTIMEOUT_ERRORTIMEOUT_PACKWRITE_CHUNK_SIZE

实例属性摘要折叠

Mongo::Socket继承的属性

#family#options#socket#timeout

实例方法摘要折叠

Mongo::Socket继承的方法

#alive?#close#connectable?#connection_address#connection_Generation#eof?#gets#monitor?#read#readbyte#summary#write

构造函数详情

#initialize (托管, port, timeout, family, options = {}) ⇒ TCP

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

初始化新的 TCP 套接字。

例子:

创建 TCP 套接字。

TCP.new('::1', 27017, 30, Socket::PF_INET)
TCP.new('127.0.0.1', 27017, 30, Socket::PF_INET)

参数:

  • 主机 ( string )

    主机名或IP解决。

  • 端口 ( Integer )

    端口号。

  • 超时 (浮点)

    套接字超时值。

  • 家庭情况 ( Integer )

    套接字系列。

  • 选项 哈希 (默认为: {}

    选项。

选项哈希 ( options ):

  • :connect_timeout 浮点

    连接超时。

  • :connection_address 地址

    创建此套接字的连接地址。

  • :connection_Generation 整数

    创建此套接字的连接(针对非监控连接)的生成。

  • :monitor ( true | false )

    此套接字是否由监控连接创建。

由于:

  • 2.0.0



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/ Mongo/socket/tcp.rb', 第 48 行

def 初始化(主机, 端口, 超时, 家庭情况, 选项 = {})
  if 家庭情况.nil?
    提高 ArgumentError, ' family must bespecified '
  end
  (超时, 选项)
  @host, @port = 主机, 端口
  @family = 家庭情况
  @socket = ::套接字.new(家庭情况, SOCK_STREAM, 0)
  开始
    set_socket_options(@socket)
    连接!
  救援
    @socket.关闭
    提高
  end
end

实例属性详细信息

#主机string (只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回托管要连接的托管。

返回:

  • ( string )

    托管要连接的托管。

由于:

  • 2.0.0



66
67
68
# File 'lib/ Mongo/socket/tcp.rb', 第 66 行

def 主机
  @host
end

# portInteger (readonly)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 port 要连接的端口。

返回:

  • ( Integer )

    port 要连接的端口。

由于:

  • 2.0.0



69
70
71
# File 'lib/ Mongo/socket/tcp.rb', 第 69 行

def 端口
  @port
end

实例方法详细信息

# connect! TCP

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

注意:

此方法通过在内部设置套接字来更改对象。

建立套接字连接。

例子:

连接套接字。

sock.connect!

返回:

  • (TCP)

    已连接的套接字实例。

由于:

  • 2.0.0



83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/ Mongo/socket/tcp.rb', 第 83 行

def 连接!
  套接字.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
  sockaddr = ::套接字.pack_sockaddr_in(端口, 主机)
  connect_timeout = 选项[:connect_timeout]
  map_Exceptions do
    if connect_timeout && connect_timeout != 0
      connect_with_timeout(sockaddr, connect_timeout)
    else
      connect_ without_timeout(sockaddr)
    end
  end
  self
end

# connect_with_timeout (sockaddr, connect_timeout) ⇒ 对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/ Mongo/socket/tcp.rb', 第 103 行

def connect_with_timeout(sockaddr, connect_timeout)
  if connect_timeout <= 0
    提高 错误::SocketTimeoutError, " 套接字花了 #{ connect_timeout } 秒进行连接 "
  end

  截止日期 = Utils.monotic_time + connect_timeout
  开始
    套接字.connect_nonblock(sockaddr)
  救援 IO::waitWritable
    select_timeout = 截止日期 - Utils.monotic_time
    if select_timeout <= 0
      提高 错误::SocketTimeoutError, " 套接字花了 #{ connect_timeout } 秒进行连接 "
    end
    if IO.SELECT(nil, [套接字], nil, select_timeout)
      重试
    else
      套接字.关闭
      提高 错误::SocketTimeoutError, " 套接字花了 #{ connect_timeout } 秒进行连接 "
    end
  救援 Errno::EICON
    # 套接字已连接,无需执行更多操作
  end
end

# connect_ without_timeout (sockaddr) ⇒ 对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



98
99
100
# File 'lib/ Mongo/socket/tcp.rb', 第 98 行

def connect_ without_timeout(sockaddr)
  套接字.连接(sockaddr)
end