Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
3K views

Ruby Socket Programming Cheat Sheet

The document provides an overview of Ruby socket programming including server and client lifecycles, reading and writing to sockets, implementing timeouts, manpage sections, and socket options. It discusses creating a server socket, binding it, listening for connections, and accepting a connection. It also covers creating a client socket and connecting to a server. It provides examples of reading from and writing to sockets, as well as implementing timeouts using IO.select. Finally, it briefly introduces manpage sections and some common socket options.

Uploaded by

Éder
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3K views

Ruby Socket Programming Cheat Sheet

The document provides an overview of Ruby socket programming including server and client lifecycles, reading and writing to sockets, implementing timeouts, manpage sections, and socket options. It discusses creating a server socket, binding it, listening for connections, and accepting a connection. It also covers creating a client socket and connecting to a server. It provides examples of reading from and writing to sockets, as well as implementing timeouts using IO.select. Finally, it briefly introduces manpage sections and some common socket options.

Uploaded by

Éder
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 1

Ruby Socket Programming Cheat Sheet

Server Lifecycle
server = Socket.new(:INET, :STREAM) addr = Socket.sockaddr_in(1337, '0.0.0.0') server.bind(addr) server.listen(Socket::SO_MAXCONN) connection, _ = server.accept

Reminders
# create # bind # listen # accept

EOF: a condition where no more data can be sent on an IO. Errno::EAGAIN: the one that gets raised when a non-blocking operation would otherwise block. Socket::SOMAXCONN: the maximum number of connections that may be queued on a socket. Pass this to listen(). IO.select: can tell you when a socket is readable or writable. Use this to implement socket timeouts.

# The Ruby Way server = TCPServer.new(1337)

Client Lifecycle
client = Socket.new(:INET, :STREAM) # create addr = Socket.sockaddr_in(80, 'google.com') client.connect(addr) # connect

# The Ruby Way client = TCPSocket.new('google.com', 80)

Reading
socket.read socket.read(1024) socket.readpartial(1024) socket.read_nonblock(1024)

# # # #

read read read read

until EOF until EOF or 1024 bytes received <= 1024 bytes or until EOF <= 1024 bytes. raises Errno::EAGAIN when there's no data

Writing
socket.write('stuff') # write data, returns number of bytes written socket.write_nonblock('stuff') # same as above, but raises Errno::EAGAIN if write(2) would block

Timeouts
timeout = 5 begin socket.read_nonblock(1024) rescue Errno::EAGAIN # raised when the read(2) would otherwise block if IO.select([socket], nil, nil, timeout) retry else raise Timeout::Error end end

Manpage Sections
Section 1: General Commands Section 2: System Calls Section 3: C Library Functions Section 4: Special Files (Devices) Section 5: File Formats Section 6: Games/Screensavers Section 7: Miscellaneous Section 8: Admin Commands Use them! And try man 2 intro.

Socket Options
socket.getsockopt(:SOCKET, :TYPE) # Get the type (:STREAM, :DGRAM, etc) socket.setsockopt(:TCP, :NODELAY, true) # Turn off Nagle's algorithm socket.setsockopt(:SOCKET, :SNDBUF, 10) # That's a tiny send buffer! socket.setsockopt(:SOCKET, :REUSEADDR, true) # Reuse recently closed ports

By Jesse Storimer - jstorimer.com

You might also like