Clase: Mongo::Socket::TCP Privado

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

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Envoltorio para sockets TCP.

Desde:

  • 2.0.0

Resumen constante

Constantes heredadas de Mongo::Socket

SSL_ERROR, TIMEOUT_ERROR, TIMEOUT_PACK, WRITE_CHUNK_SIZE

Colapso delresumen de atributos de instancia

Atributos heredados de Mongo::Socket

#familia, #opciones, #socket, #tiempo de espera

Colapso del resumen del método de instancia

Métodos heredados de Mongo::Socket

#vivo?, #cerrado, #conectable?, #dirección_de_conexión, #generación_de_conexión, #fin_de?, #obtiene, #monitorear?, #tubería, #leer, #byte_de_lectura, #resumen, #escribir

Detalles del constructor

#inicializar(host, puerto, tiempo de espera, familia, opciones = {}) ⇒ TCP

Este método forma parte de una API privada. Debe evitarlo 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 (Cadena) -

    El nombre de host o la dirección IP.

  • Puerto (Entero)

    El número de puerto.

  • tiempo de espera (Flotar) -

    El valor de tiempo de espera del socket.

  • familia (Entero)

    La familia de sockets.

  • opciones (Hash) (predeterminado: {})

    Las opciones.

Opciones Hash(opciones):

  • :tiempo de espera de conexión (Flotar)

    Tiempo de espera de conexión.

  • :dirección_de_conexión ( DIRECCIÓN)

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

  • :generación_de_conexión (Entero)

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

  • :monitor (true | false)

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

Desde:

  • 2.0.0



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# Archivo 'lib/mongo/socket/tcp.rb', línea 48

def inicializar(host, Puerto, tiempo de espera, familia, opciones = {})
  Si familia.nil?
    propagar ArgumentError, 'Sedebe especificar la familia'
  end
  Super(tiempo de espera, opciones)
  @host, @puerto = host, Puerto
  @familia = familia
  @socket = ::Enchufe.Nuevo(familia, CORRIENTE DE CALCETINES, 0)
  begin
    establecer_opciones_de_socket(@socket)
    ¡conectar!
  rescate
    @socket.cerrar
    propagar
  end
end

Detalles de los atributos de instancia

#hostCadena (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve host El host al que conectarse.

Devuelve:

  • (Cadena) -

    host El host al que conectarse.

Desde:

  • 2.0.0



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

def host
  @host
end

#puertoEntero (solo lectura)

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve puerto El puerto al que conectarse.

Devuelve:

  • (Entero)

    puerto El puerto al que conectarse.

Desde:

  • 2.0.0



69
70
71
# Archivo 'lib/mongo/socket/tcp.rb', línea 69

def Puerto
  @puerto
end

Detalles del método de instancia

#¡Conectar!TCP

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

Este método muta el objeto configurando el socket internamente.

Establece una conexión de socket.

Ejemplos:

Conecte el zócalo.

sock.connect!

Devuelve:

  • (TCP)

    La instancia de socket conectada.

Desde:

  • 2.0.0



83
84
85
86
87
88
89
90
91
92
93
94
95
# Archivo 'lib/mongo/socket/tcp.rb', línea 83

def ¡conectar!
  Socket.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
  sockaddr = ::Enchufe.pack_sockaddr_in(Puerto, host)
  tiempo de espera de conexión = opciones[:tiempo de espera de conexión]
  excepciones de mapa hacer
    Si tiempo de espera de conexión && tiempo de espera de conexión != 0
      conectar_con_tiempo_de_espera(sockaddr, tiempo de espera de conexión)
    else
      conectar_sin_tiempo_de_espera(sockaddr)
    end
  end
  yo
end

#conectar_con_tiempo_de_espera(sockaddr, tiempo_de_espera_de_conexión) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 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
# Archivo 'lib/mongo/socket/tcp.rb', línea 103

def conectar_con_tiempo_de_espera(sockaddr, tiempo de espera de conexión)
  Si tiempo de espera de conexión < = 0
    propagar Error::Error de tiempo de espera del socket, "Elsocket tardó más de #{connect_timeout} segundos enconectarse"
  end

  fecha tope = Utils.monotonic_time + tiempo de espera de conexión
  begin
    Socket.conectar_sin_bloqueo(sockaddr)
  rescate IO::EsperaEscribible
    select_timeout = fecha tope - Utils.monotonic_time
    Si select_timeout < = 0
      propagar Error::Error de tiempo de espera del socket, "Elsocket tardó más de #{connect_timeout} segundos enconectarse"
    end
    Si IO.Seleccione(nulo, [Socket], nulo, select_timeout)
      reintentar
    else
      Socket.cerrar
      propagar Error::Error de tiempo de espera del socket, "Elsocket tardó más de #{connect_timeout} segundos enconectarse"
    end
  rescate Errno::EISCONN
    # El socket está conectado, no hay nada más que hacer
  end
end

#conectar_sin_tiempo_de_espera(sockaddr) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Desde:

  • 2.0.0



98
99
100
# Archivo 'lib/mongo/socket/tcp.rb', línea 98

def conectar_sin_tiempo_de_espera(sockaddr)
  Socket.Conectar(sockaddr)
end