Skip to content

Commit

Permalink
Fix inet_drv to detect passive mode UDP errors for SCTP builds
Browse files Browse the repository at this point in the history
Debug and patch by Per Hedeland for R13B04 on erlang-patches:
  Connected UDP (and handling of any other errors in UDP recv())
  is broken in passive mode for all SCTP-enabled builds.
  • Loading branch information
RaimoNiskanen committed Jul 7, 2010
1 parent 5ef0b06 commit 2128fce
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
8 changes: 5 additions & 3 deletions erts/emulator/drivers/common/inet_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -9333,11 +9333,13 @@ static int packet_inet_input(udp_descriptor* udesc, HANDLE event)
if (err != ERRNO_BLOCK) {
if (!desc->active) {
#ifdef HAVE_SCTP
if (short_recv)
if (short_recv) {
async_error_am(desc, am_short_recv);
else
#else
} else {
async_error(desc, err);
}
#else
async_error(desc, err);
#endif
driver_cancel_timer(desc->port);
sock_select(desc,FD_READ,0);
Expand Down
21 changes: 19 additions & 2 deletions lib/kernel/test/gen_udp_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@

-export([send_to_closed/1,
buffer_size/1, binary_passive_recv/1, bad_address/1,
read_packets/1, open_fd/1]).
read_packets/1, open_fd/1, connect/1]).

all(suite) ->
[send_to_closed,
buffer_size, binary_passive_recv, bad_address, read_packets,
open_fd].
open_fd, connect].

init_per_testcase(_Case, Config) ->
?line Dog=test_server:timetrap(?default_timeout),
Expand Down Expand Up @@ -408,3 +408,20 @@ start_node(Name) ->

stop_node(Node) ->
?t:stop_node(Node).


connect(suite) ->
[];
connect(doc) ->
["Test that connect/3 has effect"];
connect(Config) when is_list(Config) ->
Addr = {127,0,0,1},
{ok,S1} = gen_udp:open(0),
{ok,P1} = inet:port(S1),
{ok,S2} = gen_udp:open(0),
ok = inet:setopts(S2, [{active,false}]),
ok = gen_udp:close(S1),
ok = gen_udp:connect(S2, Addr, P1),
ok = gen_udp:send(S2, <<16#deadbeef:32>>),
{error,econnrefused} = gen_udp:recv(S2, 0, 5),
ok.

0 comments on commit 2128fce

Please sign in to comment.