From: kazaam Date: 2007-10-09T00:05:16+09:00 Subject: Re: Can I do this perl code the same in ruby? hmm I wanted to use it because I have many different server sockets. They are created in a fork. I did it now with your loop and it seems to work now except the fact the browsing through my webproxy is now pretty slow and I'm getting really confusing errors: ./httpsocket.rb:23:in `readline': end of file reached (EOFError) from ./httpsocket.rb:23 ./httpsocket.rb:23:in `readline': end of file reached (EOFError) from ./httpsocket.rb:23 ./httpsocket.rb:23:in `readline': end of file reached (EOFError) from ./httpsocket.rb:23 ./httpsocket.rb:23:in `readline': end of file reached (EOFError) from ./httpsocket.rb:23 which seems to me like a very strange behavior because this loop means read a line from client[0] as long as possible: while client[0].readline why is an eof error there possible? shoudln't make an eof ending the loop? #!/usr/bin/env ruby $Verbose=true require 'socket' require 'uri' $bind_port = '23322' $bind_address='localhost' # opens a socket on the local machine and binds the proxy to it proxy = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) proxy.bind(Socket.pack_sockaddr_in($bind_port, $bind_address )) proxy.listen(1) # waits for Browser-client connections while client = proxy.accept fork() # reads the browsers request request='' while client[0].readline request += $_ break if $_ =~ /^\s*$/m if $_ =~ /^GET .+/ host = URI.parse(URI.extract($_)[0]).host port = URI.parse(URI.extract($_)[0]).port end end # connects to the webserver and sends the request server = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) server.connect(Socket.pack_sockaddr_in(port, host.chomp.sub('/','') )) server.write(request) # reads webservers response response='' while server.readline response += $_ break if $_ =~ /^\s*$/m end # sends the http-header to browser client[0].write(response) # listens for further responses of the server and sends it to the browser while ( response = server.read(2**16) ) client[0].write(response) end end -- kazaam