클래스: Mongo::Socket::TCP Private

상속:
Mongo::Socket 모두 표시
다음에 정의됨:
lib/ Mongo/socket/tcp.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

TCP 소켓용 래퍼입니다.

이후:

  • 2.0.0

상수 요약

Mongo::Socket에서 상속된 상수

SSL_ERROR, TIMEOUT_ERROR, TIMEOUT_PACK, WRITE_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 주소 입니다.

  • 포트 (정수)

    포트 번호입니다.

  • 타임아웃 (Float)

    소켓 시간 초과 값입니다.

  • family (정수)

    소켓 제품군입니다.

  • 옵션 (해시) (기본값: {})

    옵션.

옵션 해시(options):

  • :connect_timeout (Float)

    연결 시간이 초과되었습니다.

  • :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
# 파일 'lib/ Mongo/socket/tcp.rb', 48줄

def 초기화(호스트, 포트, 타임아웃, family, 옵션 = {})
  만약 family.nil?
    올리다 ArgumentError, '패밀리를 지정해야 합니다.'
  end
  super(타임아웃, 옵션)
  @host, @port = 호스트, 포트
  @패밀리 = family
  @socket = ::소켓.신규(family, SOCK_STREAM, 0)
  시작
    set_socket_options(@socket)
    연결!
  구출
    @socket.닫기
    올리다
  end
end

인스턴스 속성 세부 정보

#호스트string (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

반환 호스팅하다 연결할 호스팅하다 입니다.

반환합니다:

  • (string)

    호스팅하다 연결할 호스팅하다 입니다.

이후:

  • 2.0.0



66
67
68
# 파일 'lib/ Mongo/socket/tcp.rb', 66줄

def 호스트
  @host
end

#포트정수 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

포트를 반환합니다.

반환합니다:

  • (정수)

    port 연결할 포트입니다.

이후:

  • 2.0.0



69
70
71
# 파일 'lib/ Mongo/socket/tcp.rb', 69줄

def 포트
  @port
end

인스턴스 메서드 세부 정보

#연결합니다!TCP

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

참고:

이 메서드는 내부적으로 소켓을 설정하여 객체 변경합니다.

소켓 연결을 설정합니다.

예시:

소켓을 연결합니다.

sock.connect!

반환합니다:

  • (TCP)

    연결된 소켓 인스턴스.

이후:

  • 2.0.0



83
84
85
86
87
88
89
90
91
92
93
94
95
# 파일 'lib/ Mongo/socket/tcp.rb', 83줄

def 연결!
  소켓.Setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
  sockaddr = ::소켓.pack_sockaddr_in(포트, 호스트)
  connect_timeout = 옵션[:connect_timeout]
  map_Exceptions do
    만약 connect_timeout && connect_timeout != 0
      connect_with_timeout(sockaddr, connect_timeout)
    other
      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
# 파일 'lib/ Mongo/socket/tcp.rb', 103줄

def connect_with_timeout(sockaddr, connect_timeout)
  만약 connect_timeout <= 0
    올리다 오류::SocketTimeoutError, "소켓이 연결하는 데 #{connect_timeout}초 이상이 걸렸습니다."
  end

  마감일 = Utils.단조적 시간 + connect_timeout
  시작
    소켓.connect_nonblock(sockaddr)
  구출 IO::WaitWritable
    select_timeout = 마감일 - Utils.단조적 시간
    만약 select_timeout <= 0
      올리다 오류::SocketTimeoutError, "소켓이 연결하는 데 #{connect_timeout}초 이상이 걸렸습니다."
    end
    만약 IO.SELECT(nil, [소켓], nil, select_timeout)
      재시도
    other
      소켓.닫기
      올리다 오류::SocketTimeoutError, "소켓이 연결하는 데 #{connect_timeout}초 이상이 걸렸습니다."
    end
  구출 Errno::EISCONN
    # 소켓이 연결되었으며 더 이상 수행할 작업이 없습니다.
  end
end

#connect_without_timeout(sockaddr) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.0.0



98
99
100
# 파일 'lib/ Mongo/socket/tcp.rb', 98줄

def connect_without_timeout(sockaddr)
  소켓.연결(sockaddr)
end