aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2019-04-16 10:51:31 +0200
committerMicael Karlberg <[email protected]>2019-05-29 14:21:13 +0200
commitc1b8ff3ac77c5a4476ae980b4702dcf706903549 (patch)
treeef25a4e0d052e8b92942767bee4a91ca26dfae2b /erts/emulator
parent575282a3a9790b4866ae8976a5af339b41ad2cf6 (diff)
downloadotp-c1b8ff3ac77c5a4476ae980b4702dcf706903549.tar.gz
otp-c1b8ff3ac77c5a4476ae980b4702dcf706903549.tar.bz2
otp-c1b8ff3ac77c5a4476ae980b4702dcf706903549.zip
[socket] Add nowait test case (sendmsg and recvmsg udp4)
Added test case api_a_sendmsg_and_recvmsg_udp4.
Diffstat (limited to 'erts/emulator')
-rw-r--r--erts/emulator/test/socket_SUITE.erl47
1 files changed, 44 insertions, 3 deletions
diff --git a/erts/emulator/test/socket_SUITE.erl b/erts/emulator/test/socket_SUITE.erl
index a38862dbed..4d1dca9ecc 100644
--- a/erts/emulator/test/socket_SUITE.erl
+++ b/erts/emulator/test/socket_SUITE.erl
@@ -83,7 +83,7 @@
%% *** API async ***
api_a_sendto_and_recvfrom_udp4/1,
- %% api_a_sendmsg_and_recvmsg_udp4/1,
+ api_a_sendmsg_and_recvmsg_udp4/1,
%% api_a_send_and_recv_tcp4/1,
%% api_a_sendmsg_and_recvmsg_tcp4/1,
@@ -669,8 +669,8 @@ api_basic_cases() ->
api_async_cases() ->
[
- api_a_sendto_and_recvfrom_udp4%% ,
- %% api_a_sendmsg_and_recvmsg_udp4,
+ api_a_sendto_and_recvfrom_udp4,
+ api_a_sendmsg_and_recvmsg_udp4%%,
%% api_a_send_and_recv_tcp4,
%% api_a_sendmsg_and_recvmsg_tcp4
].
@@ -2664,6 +2664,47 @@ api_a_sendto_and_recvfrom_udp4(_Config) when is_list(_Config) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Basically send and receive on an IPv4 UDP (dgram) socket using
+%% sendto and recvfrom. But we try to be async. That is, we use
+%% the 'nowait' value for the Timeout argument (and await the eventual
+%% select message). Note that we only do this for the recvfrom,
+%% since its much more difficult to "arrange" for sendto.
+%%
+api_a_sendmsg_and_recvmsg_udp4(suite) ->
+ [];
+api_a_sendmsg_and_recvmsg_udp4(doc) ->
+ [];
+api_a_sendmsg_and_recvmsg_udp4(_Config) when is_list(_Config) ->
+ ?TT(?SECS(5)),
+ tc_try(api_a_sendmsg_and_recvmsg_udp4,
+ fun() ->
+ Send = fun(Sock, Data, Dest) ->
+ MsgHdr = #{addr => Dest,
+ %% ctrl => CMsgHdrs,
+ iov => [Data]},
+ socket:sendmsg(Sock, MsgHdr)
+ end,
+ Recv = fun(Sock) ->
+ case socket:recvmsg(Sock, nowait) of
+ {ok, #{addr := Source,
+ iov := [Data]}} ->
+ {ok, {Source, Data}};
+ {ok, _} = OK ->
+ OK;
+ {error, _} = ERROR ->
+ ERROR
+ end
+ end,
+ InitState = #{domain => inet,
+ send => Send,
+ recv => Recv},
+ ok = api_a_send_and_recv_udp(InitState)
+ end).
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
api_a_send_and_recv_udp(InitState) ->
ServerSeq =
[