Fuzion Logo
fuzion-lang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

net/client.fz


# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation.  If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
#  Tokiwa Software GmbH, Germany
#
#  Source code of Fuzion standard library feature net.client
#
# -----------------------------------------------------------------------



# This tries establishing a connection to `host`
# on success returns an active connection.
#
# Minimal example:
#
#     mutate ! ()->
#       _ := net.client net.family.ipv4 net.protocol.tcp "tokiwa.software" 80
#         .bind c->
#           c.with _ mutate ()->
#             say net.channel.env.get_peer_address
#             say ((io.buffered mutate).writer.env.write [0,1,2]).bytes_written
#
# Blocks until connection is established.
# NYI: UNDER DEVELOPMENT: blocking / none blocking
#
public type.client(f net.family.val, p net.protocol.val, host String, port u16) outcome net.connection
=>
  s := net.socket_type.by_protocol p
  fuzion.sys.net.connect f.as_num s.as_num p.as_num host port
    .bind desc->
      net.connections.add desc
      net.connection desc


# NYI: ENHANCEMENT: short-hands: client(host String) etc.

last changed: 2025-07-10