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 回答