[erlang-questions] new_ssl recv Length parameter

Essien Essien <>
Thu May 21 14:33:41 CEST 2009


Hi all,

I'm having difficulty getting a new_ssl connection to recieve a
specified Length of data. I've attached two simple server scripts
oldsslserver.erl uses the old_ssl implimentation, while sslserver.erl
uses the new_ssl implementation (specifically, it first accepts on tcp
then upgrades to ssl via ssl_accept).

I have also attached sslclient.erl that connects to each, and attempts
to send a header that when assembled should look like
<<"VERSION",2,1>>, but I send I break it up into <<"VERSION">>, <<2>>,
<<1>> and send them in seperate calls to ssl:send/2. oldsslserver.erl
is able to nicely assemble this back, but sslserver.erl (using the
new_ssl implementation) b0rks badly.

I think I may be missing something, but for the life of me, I can't
figure it out.

erl -man new_ssl says of recv:

              The Length argument is only meaningful when the socket is in raw
              mode and denotes the number of bytes to read. If Length = 0, all
              available bytes are returned. If  Length  >  0,  exactly  Length
              bytes  are  returned, or an error; possibly discarding less than
              Length bytes of data when the socket gets closed from the  other
              side.

As you can see in sslserver.erl I have ssl:setopts/2 on the accepted
ssl socket, to comply with the man page requirement for ssl:recv/2,
but still... foobar!

Any ideas?

cheers,
Essien

PS: Before running the scripts, you will need to change that path to
the SSL certs to point at ones you have created.
You can generate them with:

$ openssl genrsa 2048 > /path/to/key.pem
$ openssl req -new -x509 -key /path/to/key.pem -out /path/to/cert.pem
-nodes -sha1 -batch

Then point the scripts at /path/to/{key,cert}.pem
-------------- next part --------------
A non-text attachment was scrubbed...
Name: oldsslserver.erl
Type: application/octet-stream
Size: 1504 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090521/c0633ef8/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sslclient.erl
Type: application/octet-stream
Size: 925 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090521/c0633ef8/attachment-0001.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sslserver.erl
Type: application/octet-stream
Size: 1474 bytes
Desc: not available
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20090521/c0633ef8/attachment-0002.obj>


More information about the erlang-questions mailing list