TCP listener that drops all of its input? The 2019 Stack Overflow Developer Survey Results Are In Unicorn Meta Zoo #1: Why another podcast? Announcing the arrival of Valued Associate #679: Cesar Manara 2019 Community Moderator Election Resultssocat forward input to both tcp-connect and exec (script)
Accepted by European university, rejected by all American ones I applied to? Possible reasons?
Would an alien lifeform be able to achieve space travel if lacking in vision?
What other Star Trek series did the main TNG cast show up in?
Make it rain characters
Word for: a synonym with a positive connotation?
Identify 80s or 90s comics with ripped creatures (not dwarves)
How to support a colleague who finds meetings extremely tiring?
Working through the single responsibility principle (SRP) in Python when calls are expensive
What force causes entropy to increase?
How did passengers keep warm on sail ships?
How to handle characters who are more educated than the author?
Why doesn't a hydraulic lever violate conservation of energy?
ELI5: Why do they say that Israel would have been the fourth country to land a spacecraft on the Moon and why do they call it low cost?
Do I have Disadvantage attacking with an off-hand weapon?
What can I do if neighbor is blocking my solar panels intentionally?
Do working physicists consider Newtonian mechanics to be "falsified"?
Match Roman Numerals
Why not take a picture of a closer black hole?
What can I do to 'burn' a journal?
Sub-subscripts in strings cause different spacings than subscripts
How to determine omitted units in a publication
What happens to a Warlock's expended Spell Slots when they gain a Level?
Variable with quotation marks "$()"
Can each chord in a progression create its own key?
TCP listener that drops all of its input?
The 2019 Stack Overflow Developer Survey Results Are In
Unicorn Meta Zoo #1: Why another podcast?
Announcing the arrival of Valued Associate #679: Cesar Manara
2019 Community Moderator Election Resultssocat forward input to both tcp-connect and exec (script)
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I'm trying to implement a TCP listener that accepts connections and then simply drops all of its input (it's for a test harness).
Right now, I'm using socat - tcp-listen:2003,fork,reuseaddr, but that prints the input to stdout. I don't want that.
I can't redirect the output to /dev/null, because I'm doing this in the alpine/socat docker container, and it's not actually using a shell, so redirection doesn't work.
If I try to use socat /dev/null tcp-listen:2003,fork,reuseaddr, then any connection is dropped immediately, presumably because socat can't read from /dev/null.
What's the best way to implement a TCP listener that simply drops everything on the floor?
socat
add a comment |
I'm trying to implement a TCP listener that accepts connections and then simply drops all of its input (it's for a test harness).
Right now, I'm using socat - tcp-listen:2003,fork,reuseaddr, but that prints the input to stdout. I don't want that.
I can't redirect the output to /dev/null, because I'm doing this in the alpine/socat docker container, and it's not actually using a shell, so redirection doesn't work.
If I try to use socat /dev/null tcp-listen:2003,fork,reuseaddr, then any connection is dropped immediately, presumably because socat can't read from /dev/null.
What's the best way to implement a TCP listener that simply drops everything on the floor?
socat
add a comment |
I'm trying to implement a TCP listener that accepts connections and then simply drops all of its input (it's for a test harness).
Right now, I'm using socat - tcp-listen:2003,fork,reuseaddr, but that prints the input to stdout. I don't want that.
I can't redirect the output to /dev/null, because I'm doing this in the alpine/socat docker container, and it's not actually using a shell, so redirection doesn't work.
If I try to use socat /dev/null tcp-listen:2003,fork,reuseaddr, then any connection is dropped immediately, presumably because socat can't read from /dev/null.
What's the best way to implement a TCP listener that simply drops everything on the floor?
socat
I'm trying to implement a TCP listener that accepts connections and then simply drops all of its input (it's for a test harness).
Right now, I'm using socat - tcp-listen:2003,fork,reuseaddr, but that prints the input to stdout. I don't want that.
I can't redirect the output to /dev/null, because I'm doing this in the alpine/socat docker container, and it's not actually using a shell, so redirection doesn't work.
If I try to use socat /dev/null tcp-listen:2003,fork,reuseaddr, then any connection is dropped immediately, presumably because socat can't read from /dev/null.
What's the best way to implement a TCP listener that simply drops everything on the floor?
socat
socat
asked yesterday
Roger LipscombeRoger Lipscombe
823825
823825
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
I triedignoreeof... on the wrong address.
– Roger Lipscombe
yesterday
add a comment |
Best is a tricky criterion, but one can observe that Docker is as necessary for this as Microsoft Excel is. ☺
We already know a Unix program that reads its input until EOF and effectively discards it:
cat > /dev/null
Turning this into a TCP server is a very simple exercise. It is what UCSPI-TCP is all about. It takes programs that use standard I/O and wraps a simple framework around them that makes them into TCP servers. One can substitute something else for cat and change the service protocol without having to worry about the transport. One can similarly substitute UCSPI-LOCAL tools for UCSPI-TCP tools, and change the transport, without having to do a thing to cat.
There are several UCSPI-TCP toolsets. Daniel J. Bernstein wrote one. Laurent Bercot wrote one. Gerrit Pape wrote one. Adam Sampson wrote one. I wrote one. Moreover, one can mix and match tools from multiple toolsets, this stuff being intentionally readily composable. One can use my fdredir or Laurent Bercot's redirfd, or even spawn a non-interactive sh. (The former two have a lower overhead than a full-blown sh, and for the nosh tools fdredir is even a built-in so it further avoids the overhead of chaining through an external command.)
So there are several ways of doing this:
- Bernstein
tcpserver(original or djbwares; no IPv6 support)tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Hoffman
tcpserver(does both IPv4 and IPv6; has original Bernstein defaults for DNS and INFO lookups that need to be turned off)tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
- my
tcpservershim (does both IPv4 and IPv6 but has to run separate instances for each; has more modern defaults)tcpserver ::0 2003 fdredir --write 1 /dev/null cattcpserver ::0 2003 redirfd -w 1 /dev/null cattcpserver ::0 2003 sh -c 'exec > /dev/null cat'
- my UCSPI-TCP tools (does both IPv4 and IPv6, in one on Linux and FreeBSD)
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
- Bercot
s6-tcpserver6(substitutes6-tcpserver4for IPv4)s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cats6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cats6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
- Bercot s6-networking tools (substitute
s6-tcpserver4for IPv4)s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
- Pape
tcpsvd(no IPv6 support)tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Sampson
onenetd(does both IPv4 and IPv6 but has to run separate instances for each)onenetd -6 ::0 2003 fdredir --write 1 /dev/null catonenetd -6 ::0 2003 redirfd -w 1 /dev/null catonenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'
Enjoy substituting
hexdump -C 1>&2or (without
sh) fdmove -c 1 2 hexdump -Cfor the server program so that you get a local log of what your client program under test is doing. ☺
Further reading
- Protocol:
- Jonathan de Boyne Pollard (2016). The gen on the UNIX Client-Server Program Interface. Frequently Given Answers.
- Daniel J. Bernstein (1996). UNIX Client-Server Program Interface. cr.yp.to.
- toolsets:
- Daniel J. Bernstein. ucspi-tcp. cr.yp.to.
s6-networking. Laurent Bercot. skarnet.org.
execline. Laurent Bercot. skarnet.org.- Jonathan de Boyne Pollard (2019). nosh. Softwares.
- Jonathan de Boyne Pollard (2019). djbwares. Softwares.
ipsvd. Gerrit Pape. smarden.org.
onenetd. Adam Sampson. offog.org.
- reference manuals:
- Daniel J. Bernstein. The
tcpserverprogram. ucspi-tcp. - Erwin Hoffmann.
tcpserver. ucspi-tcp6. fehcom.de. s6-tcpserver4. Laurent Bercot. s6-networking. skarnet.org.s6-tcpserver6. Laurent Bercot. s6-networking. skarnet.org.fdmove. Laurent Bercot. execline. skarnet.org.redirfd. Laurent Bercot. execline. skarnet.org.tcpsvd. ipsvd. Gerrit Pape. smarden.org.- Jonathan de Boyne Pollard (2019).
tcpserver. djbwares. Softwares. - Jonathan de Boyne Pollard (2019).
fdredir. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
fdmove. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-listen. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-accept. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcpserver. nosh Guide. Softwares.
- Daniel J. Bernstein. The
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f511849%2ftcp-listener-that-drops-all-of-its-input%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
I triedignoreeof... on the wrong address.
– Roger Lipscombe
yesterday
add a comment |
socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
I triedignoreeof... on the wrong address.
– Roger Lipscombe
yesterday
add a comment |
socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr
answered yesterday
sourcejedisourcejedi
25.9k445114
25.9k445114
I triedignoreeof... on the wrong address.
– Roger Lipscombe
yesterday
add a comment |
I triedignoreeof... on the wrong address.
– Roger Lipscombe
yesterday
I tried
ignoreeof ... on the wrong address.– Roger Lipscombe
yesterday
I tried
ignoreeof ... on the wrong address.– Roger Lipscombe
yesterday
add a comment |
Best is a tricky criterion, but one can observe that Docker is as necessary for this as Microsoft Excel is. ☺
We already know a Unix program that reads its input until EOF and effectively discards it:
cat > /dev/null
Turning this into a TCP server is a very simple exercise. It is what UCSPI-TCP is all about. It takes programs that use standard I/O and wraps a simple framework around them that makes them into TCP servers. One can substitute something else for cat and change the service protocol without having to worry about the transport. One can similarly substitute UCSPI-LOCAL tools for UCSPI-TCP tools, and change the transport, without having to do a thing to cat.
There are several UCSPI-TCP toolsets. Daniel J. Bernstein wrote one. Laurent Bercot wrote one. Gerrit Pape wrote one. Adam Sampson wrote one. I wrote one. Moreover, one can mix and match tools from multiple toolsets, this stuff being intentionally readily composable. One can use my fdredir or Laurent Bercot's redirfd, or even spawn a non-interactive sh. (The former two have a lower overhead than a full-blown sh, and for the nosh tools fdredir is even a built-in so it further avoids the overhead of chaining through an external command.)
So there are several ways of doing this:
- Bernstein
tcpserver(original or djbwares; no IPv6 support)tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Hoffman
tcpserver(does both IPv4 and IPv6; has original Bernstein defaults for DNS and INFO lookups that need to be turned off)tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
- my
tcpservershim (does both IPv4 and IPv6 but has to run separate instances for each; has more modern defaults)tcpserver ::0 2003 fdredir --write 1 /dev/null cattcpserver ::0 2003 redirfd -w 1 /dev/null cattcpserver ::0 2003 sh -c 'exec > /dev/null cat'
- my UCSPI-TCP tools (does both IPv4 and IPv6, in one on Linux and FreeBSD)
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
- Bercot
s6-tcpserver6(substitutes6-tcpserver4for IPv4)s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cats6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cats6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
- Bercot s6-networking tools (substitute
s6-tcpserver4for IPv4)s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
- Pape
tcpsvd(no IPv6 support)tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Sampson
onenetd(does both IPv4 and IPv6 but has to run separate instances for each)onenetd -6 ::0 2003 fdredir --write 1 /dev/null catonenetd -6 ::0 2003 redirfd -w 1 /dev/null catonenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'
Enjoy substituting
hexdump -C 1>&2or (without
sh) fdmove -c 1 2 hexdump -Cfor the server program so that you get a local log of what your client program under test is doing. ☺
Further reading
- Protocol:
- Jonathan de Boyne Pollard (2016). The gen on the UNIX Client-Server Program Interface. Frequently Given Answers.
- Daniel J. Bernstein (1996). UNIX Client-Server Program Interface. cr.yp.to.
- toolsets:
- Daniel J. Bernstein. ucspi-tcp. cr.yp.to.
s6-networking. Laurent Bercot. skarnet.org.
execline. Laurent Bercot. skarnet.org.- Jonathan de Boyne Pollard (2019). nosh. Softwares.
- Jonathan de Boyne Pollard (2019). djbwares. Softwares.
ipsvd. Gerrit Pape. smarden.org.
onenetd. Adam Sampson. offog.org.
- reference manuals:
- Daniel J. Bernstein. The
tcpserverprogram. ucspi-tcp. - Erwin Hoffmann.
tcpserver. ucspi-tcp6. fehcom.de. s6-tcpserver4. Laurent Bercot. s6-networking. skarnet.org.s6-tcpserver6. Laurent Bercot. s6-networking. skarnet.org.fdmove. Laurent Bercot. execline. skarnet.org.redirfd. Laurent Bercot. execline. skarnet.org.tcpsvd. ipsvd. Gerrit Pape. smarden.org.- Jonathan de Boyne Pollard (2019).
tcpserver. djbwares. Softwares. - Jonathan de Boyne Pollard (2019).
fdredir. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
fdmove. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-listen. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-accept. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcpserver. nosh Guide. Softwares.
- Daniel J. Bernstein. The
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
add a comment |
Best is a tricky criterion, but one can observe that Docker is as necessary for this as Microsoft Excel is. ☺
We already know a Unix program that reads its input until EOF and effectively discards it:
cat > /dev/null
Turning this into a TCP server is a very simple exercise. It is what UCSPI-TCP is all about. It takes programs that use standard I/O and wraps a simple framework around them that makes them into TCP servers. One can substitute something else for cat and change the service protocol without having to worry about the transport. One can similarly substitute UCSPI-LOCAL tools for UCSPI-TCP tools, and change the transport, without having to do a thing to cat.
There are several UCSPI-TCP toolsets. Daniel J. Bernstein wrote one. Laurent Bercot wrote one. Gerrit Pape wrote one. Adam Sampson wrote one. I wrote one. Moreover, one can mix and match tools from multiple toolsets, this stuff being intentionally readily composable. One can use my fdredir or Laurent Bercot's redirfd, or even spawn a non-interactive sh. (The former two have a lower overhead than a full-blown sh, and for the nosh tools fdredir is even a built-in so it further avoids the overhead of chaining through an external command.)
So there are several ways of doing this:
- Bernstein
tcpserver(original or djbwares; no IPv6 support)tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Hoffman
tcpserver(does both IPv4 and IPv6; has original Bernstein defaults for DNS and INFO lookups that need to be turned off)tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
- my
tcpservershim (does both IPv4 and IPv6 but has to run separate instances for each; has more modern defaults)tcpserver ::0 2003 fdredir --write 1 /dev/null cattcpserver ::0 2003 redirfd -w 1 /dev/null cattcpserver ::0 2003 sh -c 'exec > /dev/null cat'
- my UCSPI-TCP tools (does both IPv4 and IPv6, in one on Linux and FreeBSD)
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
- Bercot
s6-tcpserver6(substitutes6-tcpserver4for IPv4)s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cats6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cats6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
- Bercot s6-networking tools (substitute
s6-tcpserver4for IPv4)s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
- Pape
tcpsvd(no IPv6 support)tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Sampson
onenetd(does both IPv4 and IPv6 but has to run separate instances for each)onenetd -6 ::0 2003 fdredir --write 1 /dev/null catonenetd -6 ::0 2003 redirfd -w 1 /dev/null catonenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'
Enjoy substituting
hexdump -C 1>&2or (without
sh) fdmove -c 1 2 hexdump -Cfor the server program so that you get a local log of what your client program under test is doing. ☺
Further reading
- Protocol:
- Jonathan de Boyne Pollard (2016). The gen on the UNIX Client-Server Program Interface. Frequently Given Answers.
- Daniel J. Bernstein (1996). UNIX Client-Server Program Interface. cr.yp.to.
- toolsets:
- Daniel J. Bernstein. ucspi-tcp. cr.yp.to.
s6-networking. Laurent Bercot. skarnet.org.
execline. Laurent Bercot. skarnet.org.- Jonathan de Boyne Pollard (2019). nosh. Softwares.
- Jonathan de Boyne Pollard (2019). djbwares. Softwares.
ipsvd. Gerrit Pape. smarden.org.
onenetd. Adam Sampson. offog.org.
- reference manuals:
- Daniel J. Bernstein. The
tcpserverprogram. ucspi-tcp. - Erwin Hoffmann.
tcpserver. ucspi-tcp6. fehcom.de. s6-tcpserver4. Laurent Bercot. s6-networking. skarnet.org.s6-tcpserver6. Laurent Bercot. s6-networking. skarnet.org.fdmove. Laurent Bercot. execline. skarnet.org.redirfd. Laurent Bercot. execline. skarnet.org.tcpsvd. ipsvd. Gerrit Pape. smarden.org.- Jonathan de Boyne Pollard (2019).
tcpserver. djbwares. Softwares. - Jonathan de Boyne Pollard (2019).
fdredir. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
fdmove. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-listen. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-accept. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcpserver. nosh Guide. Softwares.
- Daniel J. Bernstein. The
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
add a comment |
Best is a tricky criterion, but one can observe that Docker is as necessary for this as Microsoft Excel is. ☺
We already know a Unix program that reads its input until EOF and effectively discards it:
cat > /dev/null
Turning this into a TCP server is a very simple exercise. It is what UCSPI-TCP is all about. It takes programs that use standard I/O and wraps a simple framework around them that makes them into TCP servers. One can substitute something else for cat and change the service protocol without having to worry about the transport. One can similarly substitute UCSPI-LOCAL tools for UCSPI-TCP tools, and change the transport, without having to do a thing to cat.
There are several UCSPI-TCP toolsets. Daniel J. Bernstein wrote one. Laurent Bercot wrote one. Gerrit Pape wrote one. Adam Sampson wrote one. I wrote one. Moreover, one can mix and match tools from multiple toolsets, this stuff being intentionally readily composable. One can use my fdredir or Laurent Bercot's redirfd, or even spawn a non-interactive sh. (The former two have a lower overhead than a full-blown sh, and for the nosh tools fdredir is even a built-in so it further avoids the overhead of chaining through an external command.)
So there are several ways of doing this:
- Bernstein
tcpserver(original or djbwares; no IPv6 support)tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Hoffman
tcpserver(does both IPv4 and IPv6; has original Bernstein defaults for DNS and INFO lookups that need to be turned off)tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
- my
tcpservershim (does both IPv4 and IPv6 but has to run separate instances for each; has more modern defaults)tcpserver ::0 2003 fdredir --write 1 /dev/null cattcpserver ::0 2003 redirfd -w 1 /dev/null cattcpserver ::0 2003 sh -c 'exec > /dev/null cat'
- my UCSPI-TCP tools (does both IPv4 and IPv6, in one on Linux and FreeBSD)
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
- Bercot
s6-tcpserver6(substitutes6-tcpserver4for IPv4)s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cats6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cats6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
- Bercot s6-networking tools (substitute
s6-tcpserver4for IPv4)s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
- Pape
tcpsvd(no IPv6 support)tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Sampson
onenetd(does both IPv4 and IPv6 but has to run separate instances for each)onenetd -6 ::0 2003 fdredir --write 1 /dev/null catonenetd -6 ::0 2003 redirfd -w 1 /dev/null catonenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'
Enjoy substituting
hexdump -C 1>&2or (without
sh) fdmove -c 1 2 hexdump -Cfor the server program so that you get a local log of what your client program under test is doing. ☺
Further reading
- Protocol:
- Jonathan de Boyne Pollard (2016). The gen on the UNIX Client-Server Program Interface. Frequently Given Answers.
- Daniel J. Bernstein (1996). UNIX Client-Server Program Interface. cr.yp.to.
- toolsets:
- Daniel J. Bernstein. ucspi-tcp. cr.yp.to.
s6-networking. Laurent Bercot. skarnet.org.
execline. Laurent Bercot. skarnet.org.- Jonathan de Boyne Pollard (2019). nosh. Softwares.
- Jonathan de Boyne Pollard (2019). djbwares. Softwares.
ipsvd. Gerrit Pape. smarden.org.
onenetd. Adam Sampson. offog.org.
- reference manuals:
- Daniel J. Bernstein. The
tcpserverprogram. ucspi-tcp. - Erwin Hoffmann.
tcpserver. ucspi-tcp6. fehcom.de. s6-tcpserver4. Laurent Bercot. s6-networking. skarnet.org.s6-tcpserver6. Laurent Bercot. s6-networking. skarnet.org.fdmove. Laurent Bercot. execline. skarnet.org.redirfd. Laurent Bercot. execline. skarnet.org.tcpsvd. ipsvd. Gerrit Pape. smarden.org.- Jonathan de Boyne Pollard (2019).
tcpserver. djbwares. Softwares. - Jonathan de Boyne Pollard (2019).
fdredir. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
fdmove. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-listen. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-accept. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcpserver. nosh Guide. Softwares.
- Daniel J. Bernstein. The
Best is a tricky criterion, but one can observe that Docker is as necessary for this as Microsoft Excel is. ☺
We already know a Unix program that reads its input until EOF and effectively discards it:
cat > /dev/null
Turning this into a TCP server is a very simple exercise. It is what UCSPI-TCP is all about. It takes programs that use standard I/O and wraps a simple framework around them that makes them into TCP servers. One can substitute something else for cat and change the service protocol without having to worry about the transport. One can similarly substitute UCSPI-LOCAL tools for UCSPI-TCP tools, and change the transport, without having to do a thing to cat.
There are several UCSPI-TCP toolsets. Daniel J. Bernstein wrote one. Laurent Bercot wrote one. Gerrit Pape wrote one. Adam Sampson wrote one. I wrote one. Moreover, one can mix and match tools from multiple toolsets, this stuff being intentionally readily composable. One can use my fdredir or Laurent Bercot's redirfd, or even spawn a non-interactive sh. (The former two have a lower overhead than a full-blown sh, and for the nosh tools fdredir is even a built-in so it further avoids the overhead of chaining through an external command.)
So there are several ways of doing this:
- Bernstein
tcpserver(original or djbwares; no IPv6 support)tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Hoffman
tcpserver(does both IPv4 and IPv6; has original Bernstein defaults for DNS and INFO lookups that need to be turned off)tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cattcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
- my
tcpservershim (does both IPv4 and IPv6 but has to run separate instances for each; has more modern defaults)tcpserver ::0 2003 fdredir --write 1 /dev/null cattcpserver ::0 2003 redirfd -w 1 /dev/null cattcpserver ::0 2003 sh -c 'exec > /dev/null cat'
- my UCSPI-TCP tools (does both IPv4 and IPv6, in one on Linux and FreeBSD)
tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cattcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
- Bercot
s6-tcpserver6(substitutes6-tcpserver4for IPv4)s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cats6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cats6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
- Bercot s6-networking tools (substitute
s6-tcpserver4for IPv4)s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cats6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
- Pape
tcpsvd(no IPv6 support)tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cattcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cattcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
- Sampson
onenetd(does both IPv4 and IPv6 but has to run separate instances for each)onenetd -6 ::0 2003 fdredir --write 1 /dev/null catonenetd -6 ::0 2003 redirfd -w 1 /dev/null catonenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'
Enjoy substituting
hexdump -C 1>&2or (without
sh) fdmove -c 1 2 hexdump -Cfor the server program so that you get a local log of what your client program under test is doing. ☺
Further reading
- Protocol:
- Jonathan de Boyne Pollard (2016). The gen on the UNIX Client-Server Program Interface. Frequently Given Answers.
- Daniel J. Bernstein (1996). UNIX Client-Server Program Interface. cr.yp.to.
- toolsets:
- Daniel J. Bernstein. ucspi-tcp. cr.yp.to.
s6-networking. Laurent Bercot. skarnet.org.
execline. Laurent Bercot. skarnet.org.- Jonathan de Boyne Pollard (2019). nosh. Softwares.
- Jonathan de Boyne Pollard (2019). djbwares. Softwares.
ipsvd. Gerrit Pape. smarden.org.
onenetd. Adam Sampson. offog.org.
- reference manuals:
- Daniel J. Bernstein. The
tcpserverprogram. ucspi-tcp. - Erwin Hoffmann.
tcpserver. ucspi-tcp6. fehcom.de. s6-tcpserver4. Laurent Bercot. s6-networking. skarnet.org.s6-tcpserver6. Laurent Bercot. s6-networking. skarnet.org.fdmove. Laurent Bercot. execline. skarnet.org.redirfd. Laurent Bercot. execline. skarnet.org.tcpsvd. ipsvd. Gerrit Pape. smarden.org.- Jonathan de Boyne Pollard (2019).
tcpserver. djbwares. Softwares. - Jonathan de Boyne Pollard (2019).
fdredir. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
fdmove. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-listen. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcp-socket-accept. nosh Guide. Softwares. - Jonathan de Boyne Pollard (2019).
tcpserver. nosh Guide. Softwares.
- Daniel J. Bernstein. The
answered yesterday
JdeBPJdeBP
38.1k478185
38.1k478185
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
add a comment |
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
It's in docker because the rest of the system test harness is in docker.
– Roger Lipscombe
yesterday
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f511849%2ftcp-listener-that-drops-all-of-its-input%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
-socat