Clase: Mongo::Socket::TCP Privada

Hereda:
Socket
  • Objeto
Mostrar todo
Definido en:
lib/mongo/socket/tcp.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Contenedor para sockets TCP.

Desde:

  • 2.0.0

Resumen de atributos de la instancia colapsar

Resumen del método de instancia colapsar

Detalles del Constructor

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

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Inicializa un nuevo socket TCP.

Ejemplos:

Crear el socket TCP.

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

Parámetros:

  • host (string)

    El nombre de host o la dirección IP.

  • Puerto (Número entero)

    El número de puerto.

  • tiempo de espera (Float)

    El valor de tiempo de espera del socket.

  • familia (Número entero)

    La familia de socket.

  • opciones (encriptada) (por defecto: {})

    Las opciones.

Opciones Hash (options):

  • timeout_conexión (Flotante)

    Tiempo de espera de conexión.

  • Dirección de conexión (Dirección)

    Dirección de la conexión que creó este socket.

  • :connection_generation (Integer)

    Generación de la conexión (para conexiones que no son de supervisión) que creó este socket.

  • supervisar (true | false)

    Si este socket fue creado por una conexión de supervisión.

Aumenta:

  • (ArgumentError)

Desde:

  • 2.0.0



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Archivo 'lib/mongo/socket/tcp.rb', línea 45

def inicializar(host, Puerto, tiempo de espera, familia, opciones = {})
  propagar ArgumentError, 'la familia debe especificarse' si familia.nil?

  super(tiempo de espera, opciones)
  @host, @port = host, Puerto
  @family = familia
  @socket = ::Socket.Nuevo(familia, SOCK_STREAM, 0)
  begin
    set_socket_options(@socket)
    ¡conectar!
  rescate StandardError
    @socket.Cerrar
    propagar
  end
end

Detalles de atributo de instancias

#hostString (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Retorna host El host al que conectar.

Devuelve:

  • (string)

    host El host al que conectarse.

Desde:

  • 2.0.0



62
63
64
# Archivo 'lib/mongo/socket/tcp.rb', línea 62

def host
  @host
end

#puertoEntero (solo lectura)

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve el puerto El puerto al que conectarse.

Devuelve:

  • (Número entero)

    puerto El puerto al que conectarse.

Desde:

  • 2.0.0



65
66
67
# Archivo 'lib/mongo/socket/tcp.rb', línea 65

def Puerto
  @port
end

Detalles del método de instancia

#¡conecta!TCP

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Este método modifica el objeto al establecer internamente el socket.

Establece una conexión de socket.

Ejemplos:

Conecta el socket.

sock.connect!

Devuelve:

  • (TCP)

    La instancia de socket conectada.

Desde:

  • 2.0.0



79
80
81
82
83
84
85
86
87
88
89
90
91
# Archivo 'lib/mongo/socket/tcp.rb', línea 79

def ¡conectar!
  enchufe.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
  sockaddr = ::Socket.pack_sockaddr_in(Puerto, host)
  conectar_timeout = opciones[timeout_conexión]
  map_exceptions hacer
    si conectar_timeout && conectar_timeout != 0
      conectar_con_tiempo_de_espera(sockaddr, conectar_timeout)
    else
      connect_without_timeout(sockaddr)
    end
  end
  sí mismo
end

#connect_with_timeout(sockaddr, connect_timeout) ⇒ Objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Archivo 'lib/mongo/socket/tcp.rb', línea 99

def conectar_con_tiempo_de_espera(sockaddr, conectar_timeout)
  si conectar_timeout <= 0
    propagar Error::SocketTimeoutError, "El socket tardó #{connect_timeout} segundos en conectar"
  end

  fecha límite = Utils.monotonic_time + conectar_timeout
  begin
    enchufe.connect_nonblock(sockaddr)
  rescate IO::Espera escribible
    select_timeout = fecha límite - Utils.monotonic_time
    si select_timeout <= 0
      propagar Error::SocketTimeoutError, "El socket tardó #{connect_timeout} segundos en conectar"
    end

    si IO.Seleccionar(nulo, [ enchufe ], nulo, select_timeout)
      reintentar
    else
      enchufe.Cerrar
      propagar Error::SocketTimeoutError, "El socket tardó #{connect_timeout} segundos en conectar"
    end
  rescate Errno::EISCONN
    # El conector está conectado, no hay nada más que hacer
  end
end

#connect_without_timeout(sockaddr) ⇒ Object

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



94
95
96
# Archivo 'lib/mongo/socket/tcp.rb', línea 94

def connect_without_timeout(sockaddr)
  enchufe.Conectar(sockaddr)
end