Socket

class Socket

Direct Known Subclasses

Defined in:

socket.cr
socket/address.cr
socket/addrinfo.cr
socket/server.cr

Class Method Summary

Instance Method Summary

Instance methods inherited from class IO::FileDescriptor

blocking blocking, blocking=(value) blocking=, close_on_exec=(arg : Bool) close_on_exec=, close_on_exec? close_on_exec?, closed? : Bool closed?, cooked(&block) cooked, cooked! cooked!, fcntl(cmd, arg = 0) fcntl, fd : Int32 fd, finalize finalize, inspect(io) inspect, noecho(&block) noecho, noecho! noecho!, pos pos, pos=(value) pos=, pretty_print(pp) pretty_print, raw(&block) raw, raw! raw!, read_timeout=(read_timeout : Time::Span)
read_timeout=(read_timeout : Nil)
read_timeout=(read_timeout : Number) read_timeout=
, reopen(other : IO::FileDescriptor) reopen, seek(offset, whence : Seek = Seek::Set)
seek(offset, whence : Seek = Seek::Set, &block) seek
, stat stat, tell tell, tty? tty?, write_timed_out : Bool write_timed_out, write_timed_out=(write_timed_out : Bool) write_timed_out=, write_timeout=(write_timeout : Number)
write_timeout=(write_timeout : Time::Span)
write_timeout=(write_timeout : Nil) write_timeout=

Class methods inherited from class IO::FileDescriptor

fcntl(fd, cmd, arg = 0) fcntl, new(fd : Int32, blocking = false, edge_triggerable = false) new

Instance methods inherited from module IO::Buffered

close : Nil close, flush flush, flush_on_newline=(flush_on_newline) flush_on_newline=, flush_on_newline? flush_on_newline?, peek : Bytes? peek, read(slice : Bytes) read, rewind rewind, sync=(sync) sync=, sync? 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) write

Instance methods inherited from module IO

< <<, close close, closed? closed?, each_byte
each_byte(&block) : Nil each_byte
, each_char(&block) : Nil
each_char each_char
, each_line(*args, **options, &block) : Nil
each_line(*args, **options) each_line
, encoding : String encoding, flush flush, gets(limit : Int, chomp = false) : String?
gets(delimiter : Char, chomp = false) : String?
gets(delimiter : String, chomp = false) : String?
gets(chomp = true) : String?
gets(delimiter : Char, limit : Int, chomp = false) : String? gets
, gets_to_end : String gets_to_end, peek : Bytes? peek, print(*objects : _) : Nil
print(obj) : Nil print
, printf(format_string, args : Array | Tuple) : Nil
printf(format_string, *args) : Nil printf
, puts(*objects : _) : Nil
puts : Nil
puts(obj) : Nil
puts(string : String) : Nil puts
, read(slice : Bytes) read, 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) read_fully, read_fully?(slice : Bytes) 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 read_utf8_byte, rewind rewind, set_encoding(encoding : String, invalid : Symbol? = nil) set_encoding, skip(bytes_count : Int) : Nil skip, skip_to_end : Nil skip_to_end, tty? : Bool tty?, write(slice : Bytes) : Nil write, write_byte(byte : UInt8) write_byte, write_bytes(object, format : IO::ByteFormat = IO::ByteFormat::SystemEndian) write_bytes, write_utf8(slice : Bytes) write_utf8

Class methods inherited from module IO

copy(src, dst, limit : Int)
copy(src, dst) copy
, pipe(read_blocking = false, write_blocking = false)
pipe(read_blocking = false, write_blocking = false, &block) pipe
, select(read_ios, write_ios, error_ios, timeout_sec : LibC::TimeT | Int | Float?)
select(read_ios, write_ios = nil, error_ios = nil) select

Instance methods inherited from class Reference

==(other : self)
==(other) ==
, dup dup, hash hash, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference)
same?(other : Nil) same?
, to_s(io : IO) : Nil to_s

Class methods inherited from class Reference

new new

Instance methods inherited from class Object

!=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other) ===
, =~(other) =~, class class, dup dup, hash hash, inspect(io : IO)
inspect inspect
, itself itself, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, tap(&block) tap, to_json(io : IO)
to_json to_json
, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ") to_pretty_json
, to_s
to_s(io : IO) to_s
, to_yaml(io : IO)
to_yaml to_yaml
, try(&block) try

Class methods inherited from class Object

from_json(string_or_io, root : String) : self
from_json(string_or_io) : self from_json
, from_yaml(string_or_io) : self from_yaml

Class Method Detail

def self.ip?(string : String)Source

Returns true if the string represents a valid IPv4 or IPv6 address.

def self.new(fd : Int32, family, type, protocol = Protocol::IP)Source

def self.new(family, type, protocol = Protocol::IP, blocking = false)Source

def self.tcp(family : Family, blocking = false)Source

Creates a TCP socket. Consider using TCPSocket or TCPServer unless you need full control over the socket.

def self.udp(family : Family, blocking = false)Source

Creates an UDP socket. Consider using UDPSocket unless you need full control over the socket.

def self.unix(type : Type = Type::STREAM, blocking = false)Source

Creates an UNIX socket. Consider using UNIXSocket or UNIXServer unless you need full control over the socket.

Instance Method Detail

def acceptSource

Accepts an incoming connection.

Returns the client socket. Raises an IO::Error (closed stream) exception if the server is closed after invoking this method.

require "socket"

server = TCPServer.new(2202)
socket = server.accept
socket.puts Time.now
socket.close

def accept?Source

Accepts an incoming connection.

Returns the client Socket or nil if the server is closed after invoking this method.

require "socket"

server = TCPServer.new(2202)
if socket = server.accept?
  socket.puts Time.now
  socket.close
end

def bind(host : String, port : Int)Source

Binds the socket to a local address.

sock = Socket.tcp(Socket::Family::INET)
sock.bind "localhost", 1234

def bind(port : Int)Source

Binds the socket on port to all local interfaces.

sock = Socket.tcp(Socket::Family::INET6)
sock.bind 1234

def bind(addr)Source

Binds the socket to a local address.

sock = Socket.udp(Socket::Family::INET)
sock.bind Socket::IPAddress.new("192.168.1.25", 80)

def bind(addr, &block)Source

Tries to bind the socket to a local address. Yields an Errno if the binding failed-

def broadcast=(val : Bool)Source

def broadcast?Source

def close_readSource

Calls shutdown(2) with SHUT_RD

def close_writeSource

Calls shutdown(2) with SHUT_WR

def connect(host : String, port : Int, connect_timeout = nil)Source

Connects the socket to a remote host:port.

sock = Socket.tcp(Socket::Family::INET)
sock.connect "crystal-lang.org", 80

def connect(addr, timeout = nil) : NilSource

Connects the socket to a remote address. Raises if the connection failed.

sock = Socket.unix
sock.connect Socket::UNIXAddress.new("/tmp/service.sock")

def connect(addr, timeout = nil, &block)Source

Tries to connect to a remote address. Yields an IO::Timeout or an Errno error if the connection failed-

def family : FamilySource

def getsockopt(optname, optval, level = LibC::SOL_SOCKET)Source

Returns the modified optval.

def inspect(io)Source

def keepalive=(val : Bool)Source

def keepalive?Source

def lingerSource

def linger=(val : Int?)Source

WARNING: The behavior of SO_LINGER is platform specific. Bad things may happen especially with nonblocking sockets. See Cross-Platform Testing of SO_LINGER by Nybek for more information.

  • nil: disable SO_LINGER
  • Int: enable SO_LINGER and set timeout to Int seconds
    • 0: abort on close (socket buffer is discarded and RST sent to peer). Depends on platform and whether shutdown() was called first.
    • >=1: abort after Int seconds on close. Linux and Cygwin may block on close.

def listen(backlog = SOMAXCONN)Source

Tells the previously bound socket to listen for incoming connections.

def listen(backlog = SOMAXCONN, &block)Source

Tries to listen for connections on the previously bound socket. Yields an Errno on failure-

def protocol : ProtocolSource

def receive(max_message_size = 512) : Tuple(String, Address)Source

Receives a text message from the previously bound address.

server = Socket.udp(Socket::Family::INET)
server.bind("localhost", 1234)

message, client_addr = server.receive

def receive(message : Bytes) : Tuple(Int32, Address)Source

Receives a binary message from the previously bound address.

server = Socket.udp(Socket::Family::INET)
server.bind("localhost", 1234)

message = Bytes.new(32)
bytes_read, client_addr = server.receive(message)

def recv_buffer_sizeSource

def recv_buffer_size=(val : Int32)Source

def reuse_address=(val : Bool)Source

def reuse_address?Source

def reuse_port=(val : Bool)Source

def reuse_port?Source

def send(message, to addr : Address)Source

Sends a message to the specified remote address.

server = Socket::IPAddress.new("10.0.3.1", 2022)
sock = Socket.udp(Socket::Family::INET)
sock.connect("example.com", 2000)
sock.send("text query", to: server)

def send(message)Source

Sends a message to a previously connected remote address.

sock = Socket.udp(Socket::Family::INET)
sock.connect("example.com", 2000)
sock.send("text message")

sock = Socket.unix(Socket::Type::DGRAM)
sock.connect Socket::UNIXAddress.new("/tmp/service.sock")
sock.send(Bytes[0])

def send_buffer_sizeSource

def send_buffer_size=(val : Int32)Source

def setsockopt(optname, optval, level = LibC::SOL_SOCKET)Source

NOTE optval is restricted to Int32 until sizeof works on variables.

def type : TypeSource

© 2012–2017 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/0.22.0/Socket.html

在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号

意见反馈
返回顶部