[erlang-questions] gen_tcp and processes receiving

Bruce Fitzsimons <>
Fri Oct 5 04:53:47 CEST 2007


Stephan Maka wrote:
> Hi
>
>
> I'm unsure about the use of gen_tcp:controlling_process when I simply
> use a passive socket. Active sockets are no option here, I have strong
> traffic shaping requirements.
>   
Your code starts working when you change the recv length to 0 (e.g. 
unspecified) and stop expecting only one list elemet e.g. B instead of 
[B]. Your use of controlling_process is completely appropriate (think of 
it as moving the socket spout from one process to another, in active 
mode it would start spewing data at the new process.)

The documentation isn't crystal clear on this point as it says: "The 
|Length| argument is only meaningful when the socket is in |raw| mode 
and denotes the number of bytes to read." rather than something like 
"The |Length| argument should only be non-zero when the socket is in 
|raw| mode and then it denotes the number of bytes to read.".

Your socket is not in raw mode so you'll need to manage excess bytes 
yourself by buffering in a process if you want to process in 
protocol-defined-chunks. I've not used raw mode but it may be appropriate.

Cheers,
Bruce



More information about the erlang-questions mailing list