3

クライアントソケットのように

     socket = Socket.new(AF_INET, SOCK_STREAM, 0) 
     sockaddr = Socket.pack_sockaddr_in(2200, 'localhost') 
     socket.connect_nonblock(sockaddr)
     server_msg = socket.recv_nonblock(3058)
                   vs
     clientSession = TCPSocket.new( "localhost",2200)
     server_msg = socket.recv(3058)

サーバーのように

      socket = Socket.new(AF_INET, SOCK_STREAM, 0)
      sockaddr = Socket.sockaddr_in(6212, 'localhost')
      socket.bind(sockaddr)
      socket.listen(5)
                    vs
      server = TCPServer.new("localhost",3000)

構文的に異なるのか、それとも論理的にノンブロッキングにするべきなのか?

4

1 に答える 1

0

たぶん、タイムアウトを使用できますか?

Ruby ソケット クライアントが応答がない場合にタイムアウトするように、次のコードを使用します。

@socket = TCPSocket.new(host, port)

timeout=30.0
ready = IO.select([@socket], nil, nil, timeout)

if ready
  response = @socket.recv(SOCKET_READ_SIZE)
else
  message = "Socket communications timed out after #{timeout} seconds"
  logger.error message
  @socket.close if @socket.present?
  raise message
end
于 2012-12-07T13:15:45.500 に答える