Class: Async::TCPSocket

Inherits:
IPSocket show all
Defined in:
lib/async/tcp_socket.rb

Overview

Asynchronous TCP socket/client.

Direct Known Subclasses

TCPServer

Constant Summary

Constants inherited from IO

IO::WRAPPERS

Instance Attribute Summary

Attributes inherited from Wrapper

#io, #task

Class Method Summary collapse

Methods inherited from IO

[], #wrap_blocking_method, wraps

Methods inherited from Wrapper

#close, #initialize, #monitor, #wait_any, #wait_readable, #wait_writable

Constructor Details

This class inherits a constructor from Async::Wrapper

Class Method Details

.connect(remote_address, remote_port, local_address = nil, local_port = nil, task: Task.current, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/async/tcp_socket.rb', line 28

def self.connect(remote_address, remote_port, local_address = nil, local_port = nil, task: Task.current, &block)
	# This may block if remote_address is a hostname
	remote = Addrinfo.tcp(remote_address, remote_port)
	
	socket = ::Socket.new(remote.afamily, ::Socket::SOCK_STREAM, 0)
	socket.bind Addrinfo.tcp(local_address, local_port) if local_address
	
	if block_given?
		task.with(socket) do |wrapper|
			wrapper.connect(remote.to_sockaddr)
			
			yield wrapper
		end
	else
		task.bind(socket).connect(remote.to_sockaddr)
		
		return socket
	end
end