class UDPSocket
Overview
A User Datagram Protocol (UDP) socket.
UDP runs on top of the Internet Protocol (IP) and was developed for applications that do not require reliability, acknowledgement, or flow control features at the transport layer. This simple protocol provides transport layer addressing in the form of UDP ports and an optional checksum capability.
UDP is a very simple protocol. Messages, so called datagrams, are sent to other hosts on an IP network without the need to set up special transmission channels or data paths beforehand. The UDP socket only needs to be opened for communication. It listens for incoming messages and sends outgoing messages on request.
This implementation supports both IPv4 and IPv6 addresses. For IPv4 addresses you must use Socket::Family::INET
family (default) or Socket::Family::INET6
for IPv6 # addresses.
Usage example:
require "socket" # Create server server = UDPSocket.new server.bind "localhost", 1234 # Create client and connect to server client = UDPSocket.new client.connect "localhost", 1234 # Send a text message to server client.send "message" # Receive text message from client message, client_addr = server.receive # Close client and server client.close server.close
The send
methods may sporadically fail with Socket::ConnectError
when sending datagrams to a non-listening server. Wrap with an exception handler to prevent raising. Example:
begin client.send(message, @destination) rescue ex : Socket::ConnectError p ex.inspect end
Defined in:
socket/udp_socket.crConstructors
Instance Method Summary
- #join_group(address : IPAddress)
A host must become a member of a multicast group before it can receive datagrams sent to the group.
- #leave_group(address : IPAddress)
Drops membership to the specified group.
- #multicast_hops : Int32
Returns the current value of the
hoplimit
field on uni-cast packets. - #multicast_hops=(val : Int)
The multicast hops option controls the
hoplimit
field on uni-cast packets. - #multicast_interface(address : IPAddress)
For hosts with multiple interfaces, each multicast transmission is sent from the primary network interface.
- #multicast_interface(index : UInt32)
For hosts with multiple interfaces, each multicast transmission is sent from the primary network interface.
- #multicast_loopback=(val : Bool)
Sets whether transmitted multicast packets should be copied and sent back to the originator, if the host has joined the multicast group.
- #multicast_loopback? : Bool
Reports whether transmitted multicast packets should be copied and sent back to the originator.
- #receive(message : Bytes) : Tuple(Int32, IPAddress)
Receives a binary message from the previously bound address.
- #receive(max_message_size = 512) : Tuple(String, IPAddress)
Receives a text message from the previously bound address.
Instance methods inherited from class IPSocket
bind(addr) bind, close close, connect(addr, timeout = nil, &) connect, local_address : Socket::IPAddress local_address, remote_address : Socket::IPAddress remote_address Instance methods inherited from class Socket
accept : Socket accept, accept? : Socket? accept?, bind(host : String, port : Int) : Nilbind(port : Int)
bind(addr : Socket::Address) : Nil bind, blocking blocking, blocking=(value) blocking=, broadcast=(val : Bool) broadcast=, broadcast? : Bool broadcast?, close_on_exec=(arg : Bool) close_on_exec=, close_on_exec? close_on_exec?, close_read close_read, close_write close_write, closed? : Bool closed?, connect(host : String, port : Int, connect_timeout = nil) : Nil
connect(addr, timeout = nil) : Nil
connect(addr, timeout = nil, &) connect, family : Family family, fcntl(cmd, arg = 0) fcntl, fd fd, finalize finalize, inspect(io : IO) : Nil inspect, keepalive=(val : Bool) keepalive=, keepalive? keepalive?, linger linger, linger=(val : Int?) linger=, listen(backlog : Int = SOMAXCONN) : Nil
listen(backlog : Int = SOMAXCONN, &) listen, protocol : Protocol protocol, receive(message : Bytes) : Tuple(Int32, Address)
receive(max_message_size = 512) : Tuple(String, Address) receive, recv_buffer_size : Int32 recv_buffer_size, recv_buffer_size=(val : Int32) recv_buffer_size=, reuse_address=(val : Bool) reuse_address=, reuse_address? : Bool reuse_address?, reuse_port=(val : Bool) reuse_port=, reuse_port? : Bool reuse_port?, send(message, to addr : Address) : Int32
send(message) : Int32 send, send_buffer_size : Int32 send_buffer_size, send_buffer_size=(val : Int32) send_buffer_size=, tty? tty?, type : Type type
Constructor methods inherited from class Socket
new(family : Family, type : Type, protocol : Protocol = Protocol::IP, blocking = false)new(fd, family : Family, type : Type, protocol : Protocol = Protocol::IP, blocking = false) new, tcp(family : Family, blocking = false) : self tcp, unix(type : Type = Type::STREAM, blocking = false) : self unix
Class methods inherited from class Socket
fcntl(fd, cmd, arg = 0) fcntl, ip?(string : String) ip?, udp(family : Family, blocking = false) udp Class methods inherited from module Crystal::System::Socket
fcntl(fd, cmd, arg = 0) fcntl Instance methods inherited from module IO::Evented
evented_close : Nil evented_close, evented_read(slice : Bytes, errno_msg : String, &) : Int32 evented_read, evented_reopen : Nil evented_reopen, evented_send(slice : Bytes, errno_msg : String, &) : Int32 evented_send, evented_write(slice : Bytes, errno_msg : String, &) : Nil evented_write, read_timeout : Time::Span? read_timeout, read_timeout=(read_timeout : Number) : Numberread_timeout=(timeout : Time::Span?) : Time::Span? read_timeout=, write_timeout : Time::Span? write_timeout, write_timeout=(write_timeout : Number) : Number
write_timeout=(timeout : Time::Span?) : Time::Span? write_timeout=
Instance methods inherited from module IO::Buffered
buffer_size : Int32 buffer_size, buffer_size=(value) buffer_size=, close : Nil close, flush flush, flush_on_newline=(flush_on_newline) flush_on_newline=, flush_on_newline? : Bool flush_on_newline?, peek : Bytes? peek, read(slice : Bytes) : Int32 read, read_buffering=(read_buffering) read_buffering=, read_buffering? : Bool read_buffering?, rewind rewind, sync=(sync) sync=, sync? : Bool sync?, unbuffered_close unbuffered_close, unbuffered_flush unbuffered_flush, unbuffered_read(slice : Bytes) unbuffered_read, unbuffered_rewind unbuffered_rewind, unbuffered_write(slice : Bytes) unbuffered_write, write(slice : Bytes) : Nil write Instance methods inherited from class IO
<self <<, close close, closed? : Bool closed?, each_byte(&) : Nileach_byte each_byte, each_char(&) : Nil
each_char each_char, each_line(*args, **options, &block : String -> ) : Nil
each_line(*args, **options) each_line, encoding : String encoding, flush flush, gets(limit : Int, chomp = false) : String?
gets(delimiter : Char, limit : Int, chomp = false) : String?
gets(delimiter : Char, chomp = false) : String?
gets(delimiter : String, chomp = false) : String?
gets(chomp = true) : String? gets, gets_to_end : String gets_to_end, peek : Bytes? peek, pos pos, pos=(value) pos=, print(obj : _) : Nil
print(*objects : _) : Nil print, printf(format_string, args : Array | Tuple) : Nil
printf(format_string, *args) : Nil printf, puts(string : String) : Nil
puts(obj : _) : Nil
puts : Nil
puts(*objects : _) : Nil puts, read(slice : Bytes) read, read_at(offset, bytesize, & : IO -> ) read_at, read_byte : UInt8? read_byte, read_bytes(type, format : IO::ByteFormat = IO::ByteFormat::SystemEndian) read_bytes, read_char : Char? read_char, read_fully(slice : Bytes) : Int32 read_fully, read_fully?(slice : Bytes) : Int32? read_fully?, read_line(*args, **options) : String read_line, read_string(bytesize : Int) : String read_string, read_utf8(slice : Bytes) read_utf8, read_utf8_byte : UInt8? read_utf8_byte, rewind rewind, seek(offset, whence : Seek = Seek::Set) seek, set_encoding(encoding : String, invalid : Symbol? = nil) : Nil set_encoding, skip(bytes_count : Int) : Nil skip, skip_to_end : Nil skip_to_end, tell tell, tty? : Bool tty?, write(slice : Bytes) : Nil write, write_byte(byte : UInt8) : Nil write_byte, write_bytes(object, format : IO::ByteFormat = IO::ByteFormat::SystemEndian) : Nil write_bytes, write_string(slice : Bytes) : Nil write_string, write_utf8(slice : Bytes) : Nil write_utf8
Class methods inherited from class IO
copy(src, dst, limit : Int) : Int64copy(src, dst) : Int64 copy, pipe(read_blocking = false, write_blocking = false) : Tuple(IO::FileDescriptor, IO::FileDescriptor)
pipe(read_blocking = false, write_blocking = false, &) pipe, same_content?(stream1 : IO, stream2 : IO) : Bool same_content?
Instance methods inherited from class Reference
==(other : self)==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s
Constructor methods inherited from class Reference
new new Instance methods inherited from class Object
! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)===(other : YAML::Any)
===(other) ===, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash hash, in?(collection : Object) : Bool
in?(*values : Object) : Bool in?, inspect(io : IO) : Nil
inspect : String inspect, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String to_json, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil to_pretty_json, to_s(io : IO) : Nil
to_s : String to_s, to_yaml(io : IO) : Nil
to_yaml : String to_yaml, try(&) try, unsafe_as(type : T.class) forall T unsafe_as
Class methods inherited from class Object
from_json(string_or_io, root : String)from_json(string_or_io) from_json, from_yaml(string_or_io : String | IO) from_yaml
Constructor Detail
Instance Method Detail
def join_group(address : IPAddress)Source
A host must become a member of a multicast group before it can receive datagrams sent to the group. Raises Socket::Error
if an incompatible address is provided.
def leave_group(address : IPAddress)Source
Drops membership to the specified group. Memberships are automatically dropped when the socket is closed or the process exits. Raises Socket::Error
if an incompatible address is provided.
def multicast_hops : Int32Source
Returns the current value of the hoplimit
field on uni-cast packets. Datagrams with a hoplimit
of 1
are not forwarded beyond the local network. Multicast datagrams with a hoplimit
of 0
will not be transmitted on any network, but may be delivered locally if the sending host belongs to the destination group and multicast loopback is enabled.
def multicast_hops=(val : Int)Source
The multicast hops option controls the hoplimit
field on uni-cast packets. If -1
is specified, the kernel will use a default value. If a value of 0
to 255
is specified, the packet will have the specified value as hoplimit
. Other values are considered invalid and Socket::Error
will be raised. Datagrams with a hoplimit
of 1
are not forwarded beyond the local network. Multicast datagrams with a hoplimit
of 0
will not be transmitted on any network, but may be delivered locally if the sending host belongs to the destination group and multicast loopback is enabled.
def multicast_interface(address : IPAddress)Source
For hosts with multiple interfaces, each multicast transmission is sent from the primary network interface. This function overrides the default IPv4 interface address for subsequent transmissions. Setting the interface to 0.0.0.0
will select the default interface. Raises Socket::Error
unless the socket is IPv4 and an IPv4 address is provided.
def multicast_interface(index : UInt32)Source
For hosts with multiple interfaces, each multicast transmission is sent from the primary network interface. This function overrides the default IPv6 interface for subsequent transmissions. Setting the interface to index 0
will select the default interface.
def multicast_loopback=(val : Bool)Source
Sets whether transmitted multicast packets should be copied and sent back to the originator, if the host has joined the multicast group.
def multicast_loopback? : BoolSource
Reports whether transmitted multicast packets should be copied and sent back to the originator.
def receive(message : Bytes) : Tuple(Int32, IPAddress)Source
Receives a binary message from the previously bound address.
require "socket" server = UDPSocket.new server.bind "localhost", 1234 message = Bytes.new(32) bytes_read, client_addr = server.receive(message)
def receive(max_message_size = 512) : Tuple(String, IPAddress)Source
Receives a text message from the previously bound address.
require "socket" server = UDPSocket.new server.bind("localhost", 1234) message, client_addr = server.receive
© 2012–2021 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.2.1/UDPSocket.html