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

상속:
소켓
  • 객체
모두 표시
다음에 정의됨:
lib/ Mongo/socket/tcp.rb

개요

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

TCP 소켓용 래퍼입니다.

이후:

  • 2.0.0

인스턴스 속성 요약 접기

인스턴스 메서드 요약 접기

생성자 세부 정보

#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)

    이 소켓이 모니터링 연결에 의해 생성되었는지 여부입니다.

다음을 발생시킵니다.

  • (ArgumentError)

이후:

  • 2.0.0



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 파일 'lib/ Mongo/socket/tcp.rb', 45줄

def 초기화(호스트, 포트, 타임아웃, family, 옵션 = {})
  올리다 ArgumentError, '패밀리를 지정해야 합니다.' 만약 family.nil?

  super(타임아웃, 옵션)
  @host, @port = 호스트, 포트
  @패밀리 = family
  @socket = ::소켓.신규(family, SOCK_STREAM, 0)
  시작
    set_socket_options(@socket)
    연결!
  구출 StandardError
    @socket.닫기
    올리다
  end
end

인스턴스 속성 세부 정보

#호스트string (읽기 전용)

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

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

반환합니다:

  • (string)

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

이후:

  • 2.0.0



62
63
64
# 파일 'lib/ Mongo/socket/tcp.rb', 62줄

def 호스트
  @host
end

#포트정수 (읽기 전용)

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

포트를 반환합니다.

반환합니다:

  • (정수)

    port 연결할 포트입니다.

이후:

  • 2.0.0



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

def 포트
  @port
end

인스턴스 메서드 세부 정보

#연결합니다!TCP

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

참고:

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

소켓 연결을 설정합니다.

예시:

소켓을 연결합니다.

sock.connect!

반환합니다:

  • (TCP)

    연결된 소켓 인스턴스.

이후:

  • 2.0.0



79
80
81
82
83
84
85
86
87
88
89
90
91
# 파일 'lib/ Mongo/socket/tcp.rb', 79줄

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



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# 파일 'lib/ Mongo/socket/tcp.rb', 99줄

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



94
95
96
# 파일 'lib/ Mongo/socket/tcp.rb', 94줄

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