I’m using Ruby 1.8.4 on Linux and I’m having trouble with non-blocking
sockets. Socket#accept_nonblock doesn’t exist and using fcntl to set
O_NONBLOCK before calling accept doesn’t seem to work. I’ve tried with
TCPServer and Socket and accept blocks in both cases. What’s the 1.8.4
way to get non-blocking sockets?
Some sample code:
p = 8080
socket = Socket.new Socket::AF_INET, Socket::SOCK_STREAM, 0
sock_addr = Socket.pack_sockaddr_in p, ‘0.0.0.0’
original_flags = socket.fcntl Fcntl::F_GETFL, 0
socket.fcntl(Fcntl::F_SETFL, original_flags | Fcntl::O_NONBLOCK)
connection = socket.accept
I first tried nearly the same thing, but used a TCPServer instead of a
Socket and called fcntl as above before calling accept. In both
examples, the accept call blocks.
I’m new to socket programming so I’m probably just missing something.
Any ideas? Maybe I’ll just upgrade to 1.8.6.