Current section
Files
Jump to
Current section
Files
stdlib/Network/TCP.erl
%%---------------------------------------------------------------------------
%% |
%% Module : TCP
%% Copyright : (c) 2020-2021 EMQ Technologies Co., Ltd.
%% License : BSD-style (see the LICENSE file)
%%
%% Maintainer : Feng Lee, feng@emqx.io
%% Yang M, yangm@emqx.io
%% Stability : experimental
%% Portability : portable
%%
%% The TCP FFI module.
%%
%%---------------------------------------------------------------------------
-module('Network.TCP.FFI').
-include("../Foreign.hrl").
-export([ accept/1
, acceptTimeout/2
, connect/3
, connectTimeout/4
, listen/2
, recv/3
, recvTimeout/3
, send/3
, shutdown/2
]).
-define(HMod, 'Network.TCP').
accept(LSocket) ->
?IO(return(gen_tcp:accept(LSocket))).
acceptTimeout(LSocket, Timeout) ->
?IO(return(gen_tcp:accept(LSocket, Timeout))).
connect(Address, Port, Options) ->
Opts = ?TOFFIs(?HMod, isffiTcpOptionTerm, Options),
?IO(return(gen_tcp:connect(unwrap(Address), Port, Opts))).
connectTimeout(Address, Port, Options, Timeout) ->
Opts = ?TOFFIs(?HMod, isffiTcpOptionTerm, Options),
?IO(return(gen_tcp:connect(unwrap(Address), Port, Opts, Timeout))).
listen(Port, Options) ->
Opts = ?TOFFIs(?HMod, isffiListenOptionTerm, Options),
?IO(return(gen_tcp:listen(Port, Opts))).
recv(_, Socket, Length) ->
?IO(return(gen_tcp:recv(Socket, Length))).
recvTimeout(Socket, Length, Timeout) ->
?IO(return(gen_tcp:recv(Socket, Length, Timeout))).
send(_, Socket, Packet) ->
?IO(return(gen_tcp:send(Socket, Packet))).
shutdown(Socket, Method) ->
How = ?TOFFI(?HMod, isffiShutdownMethodAtom, Method),
?IO(return(gen_tcp:shutdown(Socket, How))).
unwrap({'Ip4Address', Addr}) -> Addr;
unwrap({'Ip6Address', Addr}) -> Addr.
return(ok) -> ok;
return({ok, Result}) -> Result;
return({error, Reason}) -> error(Reason).