Packages

A Gleam FTP/FTPS client library with full RFC support for both passive and active mode

Current section

Files

Jump to
gftp src gftp@listener.erl
Raw

src/gftp@listener.erl

-module(gftp@listener).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gftp/listener.gleam").
-export([listen/0, port/1, accept/2, close/1]).
-export_type([listen_socket/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" The listener module provides a TCP listener for active mode FTP data connections.\n"
" It wraps Erlang's gen_tcp:listen/accept to allow the client to accept incoming\n"
" connections from the FTP server.\n"
).
-type listen_socket() :: listen_socket.
-file("src/gftp/listener.gleam", 15).
?DOC(
" Create a TCP listener bound to an ephemeral port on all interfaces.\n"
" Returns the listen socket on success.\n"
).
-spec listen() -> {ok, listen_socket()} | {error, mug:error()}.
listen() ->
listener_ffi:listen().
-file("src/gftp/listener.gleam", 19).
?DOC(" Get the port number assigned to the listen socket.\n").
-spec port(listen_socket()) -> {ok, integer()} | {error, mug:error()}.
port(Socket) ->
listener_ffi:listener_port(Socket).
-file("src/gftp/listener.gleam", 24).
?DOC(
" Accept an incoming connection on the listen socket with a timeout in milliseconds.\n"
" Returns the accepted socket (compatible with mug.Socket).\n"
).
-spec accept(listen_socket(), integer()) -> {ok, mug:socket()} |
{error, mug:error()}.
accept(Socket, Timeout) ->
listener_ffi:accept(Socket, Timeout).
-file("src/gftp/listener.gleam", 31).
?DOC(" Close the listen socket.\n").
-spec close(listen_socket()) -> nil.
close(Socket) ->
listener_ffi:close(Socket).