A socket listening on a given port for incomming connections

Create streams to communicate with clients using accept.

Introduced properties

fun accept: nullable TCPStream

socket :: TCPServer :: accept

Accepts an incoming connection from a client
fun close

socket :: TCPServer :: close

Close this socket
fun listen(size: Int): Bool

socket :: TCPServer :: listen

Sets the socket as ready to accept incoming connections, size is the maximum number of queued clients

Redefined properties

redef type SELF: TCPServer

socket $ TCPServer :: SELF

Type of this instance, automatically specialized in every class
redef init init

socket $ TCPServer :: init

Create and bind a listening server socket on port port

All properties

fun !=(other: nullable Object): Bool

core :: Object :: !=

Have self and other different values?
fun ==(other: nullable Object): Bool

core :: Object :: ==

Have self and other the same value?
type CLASS: Class[SELF]

core :: Object :: CLASS

The type of the class of self.
type SELF: Object

core :: Object :: SELF

Type of this instance, automatically specialized in every class
fun accept: nullable TCPStream

socket :: TCPServer :: accept

Accepts an incoming connection from a client
fun address: String

socket :: TCPSocket :: address

IPv4 address to which self is connected
protected fun address=(address: String)

socket :: TCPSocket :: address=

IPv4 address to which self is connected
fun blocking=(value: Bool)

socket :: Socket :: blocking=

Set whether calls to accept are blocking
protected fun class_factory(name: String): CLASS

core :: Object :: class_factory

Implementation used by get_class to create the specific class.
fun class_name: String

core :: Object :: class_name

The class name of the object.
fun close

socket :: TCPServer :: close

Close this socket
fun closed: Bool

socket :: Socket :: closed

Is this socket closed?
protected fun closed=(closed: Bool)

socket :: Socket :: closed=

Is this socket closed?
fun get_class: CLASS

core :: Object :: get_class

The meta-object representing the dynamic type of self.
fun hash: Int

core :: Object :: hash

The hash code of the object.
init init

core :: Object :: init

fun inspect: String

core :: Object :: inspect

Developer readable representation of self.
protected fun inspect_head: String

core :: Object :: inspect_head

Return "CLASSNAME:#OBJECTID".
intern fun is_same_instance(other: nullable Object): Bool

core :: Object :: is_same_instance

Return true if self and other are the same instance (i.e. same identity).
fun is_same_serialized(other: nullable Object): Bool

core :: Object :: is_same_serialized

Is self the same as other in a serialization context?
intern fun is_same_type(other: Object): Bool

core :: Object :: is_same_type

Return true if self and other have the same dynamic type.
fun listen(size: Int): Bool

socket :: TCPServer :: listen

Sets the socket as ready to accept incoming connections, size is the maximum number of queued clients
intern fun object_id: Int

core :: Object :: object_id

An internal hash code for the object based on its identity.
fun output

core :: Object :: output

Display self on stdout (debug only).
intern fun output_class_name

core :: Object :: output_class_name

Display class name on stdout (debug only).
fun port: Int

socket :: TCPSocket :: port

Port used by the socket
protected fun port=(port: Int)

socket :: TCPSocket :: port=

Port used by the socket
fun serialization_hash: Int

core :: Object :: serialization_hash

Hash value use for serialization
intern fun sys: Sys

core :: Object :: sys

Return the global sys object, the only instance of the Sys class.
abstract fun to_jvalue(env: JniEnv): JValue

core :: Object :: to_jvalue

fun to_s: String

core :: Object :: to_s

User readable representation of self.
package_diagram socket::TCPServer TCPServer socket::TCPSocket TCPSocket socket::TCPServer->socket::TCPSocket socket::Socket Socket socket::TCPSocket->socket::Socket ...socket::Socket ... ...socket::Socket->socket::Socket

Ancestors

interface Object

core :: Object

The root of the class hierarchy.
abstract class Socket

socket :: Socket

A general Socket, either TCP or UDP

Parents

abstract class TCPSocket

socket :: TCPSocket

A general TCP socket, either a TCPStream or a TCPServer

Class definitions

socket $ TCPServer
# A socket listening on a given `port` for incomming connections
#
# Create streams to communicate with clients using `accept`.
class TCPServer
	super TCPSocket

	private var addrin: NativeSocketAddrIn is noinit

	# Create and bind a listening server socket on port `port`
	init
	do
		native = new NativeSocket.socket(new NativeSocketAddressFamilies.af_inet,
			new NativeSocketTypes.sock_stream, new NativeSocketProtocolFamilies.pf_unspec)
		assert not native.address_is_null
		if not native.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) then
			closed = true
			return
		end

		addrin = new NativeSocketAddrIn
		addrin.family = new NativeSocketAddressFamilies.af_inet
		addrin.port = port
		addrin.address_any

		address = addrin.address.to_s

		# Bind it
		closed = not bind
	end

	# Associates the socket to a local address and port
	#
	# Returns whether the socket has been be bound.
	private fun bind: Bool do
		return native.bind(addrin) >= 0
	end

	# Sets the socket as ready to accept incoming connections, `size` is the maximum number of queued clients
	#
	# Returns `true` if the socket could be set, `false` otherwise
	fun listen(size: Int): Bool do
		return native.listen(size) >= 0
	end

	# Accepts an incoming connection from a client
	#
	# Create and return a new socket to the client. May return null if not
	# `blocking` and there's no waiting clients, or upon an interruption
	# (whether `blocking` or not).
	#
	# Require: not closed
	fun accept: nullable TCPStream
	do
		assert not closed
		var native = native.accept
		if native == null then return null
		return new TCPStream.server_side(native)
	end

	# Close this socket
	fun close
	do
		# FIXME unify with `SocketStream::close` when we can use qualified names

		if closed then return
		if native.close >= 0 then
			closed = true
		end
	end
end
lib/socket/socket.nit:219,1--288,3