Classe: Mongo::Socket::TCP Private

Herda:
Mongo::Socket mostrar tudo
Definido em:
lib/mongo/socket/tcp.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Encapsulador para soquetes TCP.

Desde:

  • 2.0.0

Resumo constante

Constantes herdadas de Mongo::Socket

SSL_ERROR, TIMEOUT_ERROR, TIMEOUT_PACK, WRITE_CHUNK_SIZE

Recolhimento do Resumo do atributo de instância

Atributos herdados de Mongo::Socket

#family, #options, #socket, #timeout

Recolhimento do Resumo do método de instância

Métodos herdados do Mongo::Socket

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

Detalhes do construtor

#inicializar(host, porta, tempo limite, família, opções = {}) ➤ TCP

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Inicia um novo soquete TCP.

Exemplos:

Crie o soquete TCP.

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

Parâmetros:

  • Anfitrião (string)

    O nome do host ou endereço IP.

  • Porta (Inteiro)

    O número da porta.

  • timeout (Flutuante)

    O valor de tempo limite do soquete.

  • família (Inteiro)

    A família do soquete.

  • opções (Hash) (padrão para: {})

    As opções.

Hash de opções (opções):

  • :connect_timeout (Flutuante)

    Tempo limite de conexão.

  • :connection_address (Endereço)

    Endereço da conexão que criou este soquete.

  • :connection_generação (Inteiro)

    Geração da conexão (para conexões não monitoradas) que criou esse soquete.

  • :monitor (verdadeiro | falso)

    Se esse soquete foi criado por uma conexão de monitoramento.

Desde:

  • 2.0.0



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

def inicializar(Anfitrião, Porta, timeout, família, opções = {})
  se família.nada?
    aumentar ArgumentError, ' afamília deve ser especificada'
  end
  super(timeout, opções)
  @host, @port = Anfitrião, Porta
  @family = família
  @socket = ::Soquete.Novo(família, SOCK_STREAM, 0)
  começar
    set_socket_options(@socket)
    Conecte-se!
  salvar
    @socket.Fechar
    aumentar
  end
end

Detalhes do atributo da instância

#hoststring (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna host O host ao qual se conectar.

Retorna:

  • (string)

    host O host ao qual se conectar.

Desde:

  • 2.0.0



66
67
68
# Arquivo 'lib/mongo/socket/tcp.rb', linha 66

def Anfitrião
  @host
end

#portainteiro (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna porta A porta à qual se conectar.

Retorna:

  • (Inteiro)

    porta A porta à qual se conectar.

Desde:

  • 2.0.0



69
70
71
# Arquivo 'lib/mongo/socket/tcp.rb', linha 69

def Porta
  @port
end

Detalhes do método de instância

#connect!TCP

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

Este método muta o objeto definindo o soquete internamente.

Estabelece uma conexão de soquete.

Exemplos:

Conecte o soquete.

sock.connect!

Retorna:

  • (TCP)

    A instância do soquete conectado.

Desde:

  • 2.0.0



83
84
85
86
87
88
89
90
91
92
93
94
95
# Arquivo 'lib/mongo/socket/tcp.rb', linha 83

def Conecte-se!
  soquete.setsockopt(IPPROTO_TCP, TCP_NODELEY, 1)
  sockaddr = ::Soquete.pack_sockaddr_in(Porta, Anfitrião)
  connect_timeout = opções[:connect_timeout]
  map_Exceptions fazer
    se connect_timeout && connect_timeout != 0
      connect_with_timeout(sockaddr, connect_timeout)
    mais
      connect_without_timeout(sockaddr)
    end
  end
  auto
end

#connect_with_timeout(sockaddr, connect_timeout) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no 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
# Arquivo 'lib/mongo/socket/tcp.rb', linha 103

def connect_with_timeout(sockaddr, connect_timeout)
  se connect_timeout <= 0
    aumentar Erro::SocketTimeoutError, "O soquete levou mais de #{connect_timeout} segundos para conectar"
  end

  prazo = Utilidades.monotonic_time + connect_timeout
  começar
    soquete.connect_nonblock(sockaddr)
  salvar IO::WaitWritable
    select_timeout = prazo - Utilidades.monotonic_time
    se select_timeout <= 0
      aumentar Erro::SocketTimeoutError, "O soquete levou mais de #{connect_timeout} segundos para conectar"
    end
    se IO.selecione(nada, [soquete], nada, select_timeout)
      tentar novamente
    mais
      soquete.Fechar
      aumentar Erro::SocketTimeoutError, "O soquete levou mais de #{connect_timeout} segundos para conectar"
    end
  salvar Errno::EISCONN
    # O soquete está conectado, nada mais a fazer
  end
end

#connect_without_timeout(sockaddr) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



98
99
100
# Arquivo 'lib/mongo/socket/tcp.rb', linha 98

def connect_without_timeout(sockaddr)
  soquete.Conecte(sockaddr)
end