<html><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
</head><body bgcolor="#FFFFFF" text="#000000">I apologize for getting 
terminology wrong, I guess. I've never heard these terms before in 
reference to working with external processes. I'm still not really 
getting it though.<br>
<br>
The problem here is that Erlang ports let me read from stdout and write 
to stdin, but not let me flush stdin and tell the program that I'm done 
writing, which is important for certain programs that wait for this EOF 
to start producing output. What am I saying that's wrong? I'm not saying
 these are the same things. In fact, I'm not trying to make any 
assertions about how unix processes and pipes works, and if it sounds 
like that then I apologize and retract any assertions I've made.<br>
<br>
I'm simply asking how I'm supposed to deal with programs that I have 
*no* control over that wait for a EOF on their input to start producing 
data. I just want to send a ^D.I have examples of programs that do that 
and a thousand ways to do it in other languages, and I'm being told it 
is disastrous to do. If the solution is to just keep doing what 
everybody has been doing in Erlang for years which is write giant hack 
middleman programs to do it, then I'll concede defeat. I've got to say 
though, I'm pretty blown away by your response to this.<br>
<br>
Anyways, thanks for the responses everyone!<br>
<br>
<blockquote style="border: 0px none;" 
cite="mid:1D920410-A1C9-4680-AA25-66555A761057@cs.otago.ac.nz" 
type="cite">
  <div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div 
style="display:table;width:100%;border-top:1px solid 
#EDEEF0;padding-top:5px">       <div 
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
 photoaddress="ok@cs.otago.ac.nz" photoname="Richard A. O'Keefe" 
src="cid:part1.09080209.09010609@raynes.me" 
name="compose-unknown-contact.jpg" height="25px" width="25px"></div>   <div
 
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
        <a moz-do-not-send="true" href="mailto:ok@cs.otago.ac.nz" 
style="color:#737F92 
!important;padding-right:6px;font-weight:bold;text-decoration:none 
!important;">Richard A. O'Keefe</a></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;">   
  <font color="#9FA2A5"><span style="padding-left:6px">July 29, 2013 
10:44 PM</span></font></div></div></div>
  <div style="color:#888888;margin-left:24px;margin-right:24px;" 
__pbrmquotes="true" class="__pbConvBody"><pre wrap="">On 29/07/2013, at 8:20 PM, Anthony Grimes wrote:

</pre><blockquote type="cite"><pre wrap="">Yeah, re-reading your post a couple of times, I think we might be on the wrong page or something. Here is a low level example of what I'd like to be able to do in Erlang. This is a Clojure repl session where I interact with the 'cat' program via the built in Java Process library:

user=> (def proc (.exec (Runtime/getRuntime) (into-array String ["cat"])))
#'user/proc
user=> (def stdin (.getOutputStream proc))
#'user/stdin
user=> (def stdout (.getInputStream proc))
</pre></blockquote><pre wrap=""><!---->
I have some trouble reading Clojure.  I don't know what the dots are.
Hazarding a guess,

        This is *PRECISELY* the "Hello, deadlock!"
        kind of buggy stuff that the C interface was designed
        to *not* let you write.

</pre><blockquote type="cite"><pre wrap="">Lots of unix programs work like this.
We have cat in this example, but grep, wc, and various others work like that as well. It is this easy or easier to do the same thing in every other language I can think of.
</pre></blockquote><pre wrap=""><!---->
Actually, NO.  You are talking about "filters" here,
and filters are designed to be connected into ***ACYCLIC*** networks.

</pre><blockquote type="cite"><pre wrap="">If it's fundamentally a bad thing, I'm surprised these programs work like that in the first place and that these languages support this.
</pre></blockquote><pre wrap=""><!---->
The programs do NOT work the way you think they do.
A filter reads from its standard input.
It writes to its standard output.
If it could have emotions, it would view the prospect
of those two being the *same* thing with shuddering dread.
(Except of course, when the thing is the terminal.  The
user is assumed to be capable of infinite buffering.)

Erlang is perfectly happy to be connected to an ACYCLIC network
of pipe-linked processes too.

</pre><blockquote type="cite"><pre wrap="">It seems to be an entirely common place, basic feature any remotely high level programming language.
</pre></blockquote><pre wrap=""><!---->
Actually, no.  The ability to connect to the standard input *AND* the standard
output of the *same* process is *not* a commonplace feature of high level
programming languages (some do, some don't) because unless you code with
extreme (and to a certain extent, non-portable) care, you end up in deadlock land.

Only if one of the programs is absolutely guaranteed to write a tiny
amount of information -- at most one PIPE_BUF worth, do you have
any shadow of a trace of a right to expect it to work.

If you don't believe me, believe the Java documentation,
where the page for java.lang.Process says

        All [the new process's] standard io (i.e. stdin, stdout, stderr)
        operations will be redirected to the parent process through
        three streams (getOutputStream(), getInputStream(),
        getErrorStream()).  The parent process uses these streams to feed input to and get      output from the subprocess.
</pre><blockquote type="cite"><blockquote type="cite"><blockquote 
type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote 
type="cite"><pre wrap="">  Because some native platforms only provide limited buffer size
        for standard input and output streams, failure to promptly
        write the input stream or read the output stream of the
        subprocess may cause the subprocess to block, and even deadlock.
</pre></blockquote></blockquote></blockquote></blockquote></blockquote></blockquote><pre wrap=""><!---->
The POSIX guarantee for PIPE_BUF is just 512 bytes.
That is, should the parent process write 513 bytes to the child,
and the child write 513 bytes to the parent,
hello deadlock!

Like I said, connecting to *both* ends of a command through pipes
is something to anticipate with shuddering dread.  It is *not* a
standard feature to be used lightly.

I can't find anything about external processes in the Haskell 2010
report.  System.Process
<a class="moz-txt-link-freetext" href="http://www.haskell.org/ghc/docs/7.4-latest/html/libraries/process-1.1.0.1/System-Process.html">http://www.haskell.org/ghc/docs/7.4-latest/html/libraries/process-1.1.0.1/System-Process.html</a>
isn't mentioned in Haskell 2010.  I am actually pretty shocked that
the documentation doesn't mention the deadlock problem.



</pre></div>
  <div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div 
style="display:table;width:100%;border-top:1px solid 
#EDEEF0;padding-top:5px">       <div 
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
 photoaddress="i@raynes.me" photoname="Anthony Grimes" 
src="cid:part2.08000206.09040004@raynes.me" name="postbox-contact.jpg" 
height="25px" width="25px"></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
        <a moz-do-not-send="true" href="mailto:i@raynes.me" 
style="color:#737F92 
!important;padding-right:6px;font-weight:bold;text-decoration:none 
!important;">Anthony Grimes</a></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;">   
  <font color="#9FA2A5"><span style="padding-left:6px">July 29, 2013 
1:20 AM</span></font></div></div></div>
  <div style="color:#888888;margin-left:24px;margin-right:24px;" 
__pbrmquotes="true" class="__pbConvBody">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
Yeah, re-reading your post
 a couple of times, I think we might be on the wrong page or something. 
Here is a low level example of what I'd like to be able to do in Erlang.
 This is a Clojure repl session where I interact with the 'cat' program 
via the built in Java Process library:<br>
<br>
user=> (def proc (.exec (Runtime/getRuntime) (into-array String 
["cat"])))<br>
#'user/proc<br>
user=> (def stdin (.getOutputStream proc))<br>
#'user/stdin<br>
user=> (def stdout (.getInputStream proc))<br>
#'user/stdout<br>
user=> (.write stdin (.getBytes "Hi!"))<br>
nil<br>
user=> (.close stdin)<br>
nil<br>
user=> (let [arr (byte-array 3)] (.read stdout arr) (String. arr))<br>
"Hi!"<br>
<br>
Lots of unix programs work like this. We have cat in this example, but 
grep, wc, and various others work like that as well. It is this easy or 
easier to do the same thing in every other language I can think of. If 
it's fundamentally a bad thing, I'm surprised these programs work like 
that in the first place and that these languages support this. It seems 
to be an entirely common place, basic feature any remotely high level 
programming language.<br>
<br>
Perhaps this example and clarification will clear things up!<br>
<br>
-Anthony<br>

  </div>
  <div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div 
style="display:table;width:100%;border-top:1px solid 
#EDEEF0;padding-top:5px">       <div 
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
 photoaddress="ok@cs.otago.ac.nz" photoname="Richard A. O'Keefe" 
src="cid:part1.09080209.09010609@raynes.me" 
name="compose-unknown-contact.jpg" height="25px" width="25px"></div>   <div
 
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
        <a moz-do-not-send="true" href="mailto:ok@cs.otago.ac.nz" 
style="color:#737F92 
!important;padding-right:6px;font-weight:bold;text-decoration:none 
!important;">Richard A. O'Keefe</a></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;">   
  <font color="#9FA2A5"><span style="padding-left:6px">July 29, 2013 
12:15 AM</span></font></div></div></div>
  <div style="color:#888888;margin-left:24px;margin-right:24px;" 
__pbrmquotes="true" class="__pbConvBody"><pre wrap="">On 29/07/2013, at 4:14 PM, Anthony Grimes wrote:

</pre><blockquote type="cite"><pre wrap="">and communicating with external processes in Erlang. They seem to have
at least one particular fatal flaw which prevents them from being very
useful to me, and that is that there is no way to close stdin (and send
EOF) and then also read from the process's stdout. For example, I cannot
use a port to start the 'cat' program which listens on stdin for data
and waits for EOF and then echos that data back to you. I can do the
first part, which is send it data on stdin, but the only way for me to
close it is to call port_close and close the entire process.
</pre></blockquote><pre wrap=""><!---->
Note that "only send data to a command" and "only receive data from a
command" are the traditional ways for a UNIX program to communicate
with another over a pipe.  popen(<command>, "r") reads the output of
the command and popen(<command>, "w") writes to the input of the command.
There isn't even any standard _term_ for talking about connecting to both
stdin and stdout of a command in UNIX, and that's because it's an
incredibly easy way to deadlock.

</pre><blockquote type="cite"><pre wrap="">This issue prevents Erlang users from doing any even slightly more than
trivial communication with external processes without having some kind
of middleman program that handles the creation of the actual process you
need to talk to and looks for a specific byte sequence to indicate 'EOF'.
</pre></blockquote><pre wrap=""><!---->
Just like it prevents C users from doing the same thing.
Unless they fake something up using named pipes or UNIX-domain sockets.
(Or message queues.  I do wish Mac OS X implemented rather more of POSIX...)

Unix anonymous pipes are simply the wrong tool for the job in _any_
programming language.

The historic way to do "slightly more than trivial communication with
external processes" has been to set the external processes up as C nodes
or to use sockets.




</pre></div>
  <div style="margin:30px 25px 10px 25px;" class="__pbConvHr"><div 
style="display:table;width:100%;border-top:1px solid 
#EDEEF0;padding-top:5px">       <div 
style="display:table-cell;vertical-align:middle;padding-right:6px;"><img
 photoaddress="i@raynes.me" photoname="Anthony Grimes" 
src="cid:part2.08000206.09040004@raynes.me" name="postbox-contact.jpg" 
height="25px" width="25px"></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;width:100%">
        <a moz-do-not-send="true" href="mailto:i@raynes.me" 
style="color:#737F92 
!important;padding-right:6px;font-weight:bold;text-decoration:none 
!important;">Anthony Grimes</a></div>   <div 
style="display:table-cell;white-space:nowrap;vertical-align:middle;">   
  <font color="#9FA2A5"><span style="padding-left:6px">July 28, 2013 
9:14 PM</span></font></div></div></div>
  <div style="color:#888888;margin-left:24px;margin-right:24px;" 
__pbrmquotes="true" class="__pbConvBody">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
  <span><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">Howdy folks.</span><br 
style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255);"><br style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255);"><span style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255); display: inline !important; float:
 none;">I unfortunately have not been able to use Erlang for most of 
what I've</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">been doing lately because of a long standing issue with 
Erlang ports</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">that I'd like to start a 
discussion about here.</span><br style="color: rgb(34, 34, 34); 
font-family: arial, sans-serif; font-size: 13px; font-style: normal; 
font-variant: normal; font-weight: normal; letter-spacing: normal; 
line-height: normal; orphans: auto; text-align: start; text-indent: 0px;
 text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">As far as I am aware, ports are generally the only option 
for creating</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">and communicating with 
external processes in Erlang. They seem to have</span><br style="color: 
rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px; 
font-style: normal; font-variant: normal; font-weight: normal; 
letter-spacing: normal; line-height: normal; orphans: auto; text-align: 
start; text-indent: 0px; text-transform: none; white-space: normal; 
widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255);"><span style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255); display: inline !important; float:
 none;">at least one particular fatal flaw which prevents them from 
being very</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">useful to me, and that is that there is no way to close 
stdin (and send</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">EOF) and then also read from 
the process's stdout. For example, I cannot</span><br style="color: 
rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px; 
font-style: normal; font-variant: normal; font-weight: normal; 
letter-spacing: normal; line-height: normal; orphans: auto; text-align: 
start; text-indent: 0px; text-transform: none; white-space: normal; 
widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255);"><span style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255); display: inline !important; float:
 none;">use a port to start the 'cat' program which listens on stdin for
 data</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">and waits for EOF and then echos that data back to you. I 
can do the</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">first part, which is send it data on stdin, but the only 
way for me to</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">close it is to call port_close
 and close the entire process.</span><br style="color: rgb(34, 34, 34); 
font-family: arial, sans-serif; font-size: 13px; font-style: normal; 
font-variant: normal; font-weight: normal; letter-spacing: normal; 
line-height: normal; orphans: auto; text-align: start; text-indent: 0px;
 text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">This issue prevents Erlang users from doing any even 
slightly more than</span><br style="color: rgb(34, 34, 34); font-family:
 arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">trivial communication with 
external processes without having some kind</span><br style="color: 
rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px; 
font-style: normal; font-variant: normal; font-weight: normal; 
letter-spacing: normal; line-height: normal; orphans: auto; text-align: 
start; text-indent: 0px; text-transform: none; white-space: normal; 
widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255);"><span style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255); display: inline !important; float:
 none;">of middleman program that handles the creation of the actual 
process you</span><br style="color: rgb(34, 34, 34); font-family: arial,
 sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">need to talk to and looks for a specific byte sequence to 
indicate 'EOF'.</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">I could totally be wrong, but it seems like we need 
something other than</span><br style="color: rgb(34, 34, 34); 
font-family: arial, sans-serif; font-size: 13px; font-style: normal; 
font-variant: normal; font-weight: normal; letter-spacing: normal; 
line-height: normal; orphans: auto; text-align: start; text-indent: 0px;
 text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">just port_close. Something 
like</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><a
 moz-do-not-send="true" style="color: rgb(17, 85, 204); font-family: 
arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" 
target="_blank" 
href="http://www.erlang.org/doc/man/gen_tcp.html#shutdown-2">http://www.erlang.org/doc/man/<wbr>gen_tcp.html#shutdown-2</a><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;"><span class="Apple-converted-space"> </span>which lets you
 say</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">"Hey, I want to close the stdin of this process but still 
read from its</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">stdout." or something similar.
 I could be totally off track on what a</span><br style="color: rgb(34, 
34, 34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255);"><span style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255); display: inline !important; float:
 none;">good solution would be.</span><br style="color: rgb(34, 34, 34);
 font-family: arial, sans-serif; font-size: 13px; font-style: normal; 
font-variant: normal; font-weight: normal; letter-spacing: normal; 
line-height: normal; orphans: auto; text-align: start; text-indent: 0px;
 text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">So I'm wondering if people are aware of this problem, and 
I'd like to</span><br style="color: rgb(34, 34, 34); font-family: arial,
 sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">make sure that people think it is an actual problem that 
should be</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">fixed. I'm also curious what people think a good solution 
to the problem</span><br style="color: rgb(34, 34, 34); font-family: 
arial, sans-serif; font-size: 13px; font-style: normal; font-variant: 
normal; font-weight: normal; letter-spacing: normal; line-height: 
normal; orphans: auto; text-align: start; text-indent: 0px; 
text-transform: none; white-space: normal; widows: auto; word-spacing: 
0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 
255);"><span style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); 
display: inline !important; float: none;">would be. I'm not sure I have 
the time/particular skill set to fix it</span><br style="color: rgb(34, 
34, 34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255);"><span style="color: rgb(34, 34, 
34); font-family: arial, sans-serif; font-size: 13px; font-style: 
normal; font-variant: normal; font-weight: normal; letter-spacing: 
normal; line-height: normal; orphans: auto; text-align: start; 
text-indent: 0px; text-transform: none; white-space: normal; widows: 
auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; 
background-color: rgb(255, 255, 255); display: inline !important; float:
 none;">given that the port code is some pretty obscure (to me) C code, 
but</span><br style="color: rgb(34, 34, 34); font-family: arial, 
sans-serif; font-size: 13px; font-style: normal; font-variant: normal; 
font-weight: normal; letter-spacing: normal; line-height: normal; 
orphans: auto; text-align: start; text-indent: 0px; text-transform: 
none; white-space: normal; widows: auto; word-spacing: 0px; 
-webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"><span
 style="color: rgb(34, 34, 34); font-family: arial, sans-serif; 
font-size: 13px; font-style: normal; font-variant: normal; font-weight: 
normal; letter-spacing: normal; line-height: normal; orphans: auto; 
text-align: start; text-indent: 0px; text-transform: none; white-space: 
normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;
 background-color: rgb(255, 255, 255); display: inline !important; 
float: none;">starting conversation seems like a good way to begin.</span>
 <br>
  </span>
  </div>
</blockquote>
</body></html>