Can you send a more complete test program? All the tests I have run have worked as expected.

> We get raise SysErr immediately after Socket.connectNB to a non-existent
> server.
> However, it is a nonblocking connect, so we should get information about
> unsuccesful connecton only after socket access.

What do you mean by this? If you use connectNB to connect to a service that is not yet running you will get a ECONNREFUSED error. The only question is where. If the underlying "connect" system call returns the error immediately then connectNB will raise an exception. Whether it does or not depends on the system kernel.

David

On 20/06/2016 14:52, Kostirya wrote:
Hello.

Yes. It's worked when IP not 127.0.0.1.
But is not worked whatever with NetHostDB.getByName "localhost".
Probably bug have somewhere else.

I use Poly/ML version from
commit fccf59807aea1d12f11b49f80f38b7137ad8b642
Author: David Matthews <d...@prolingua.co.uk>
Date:   Wed May 25 17:09:38 2016 +0100

It's later than

git show  0d050ae45
commit 0d050ae450de3d5546deef873aa2b5486e64dea2
Author: David Matthews <d...@prolingua.co.uk>
Date:   Thu May 19 15:48:58 2016 +0100


P.S.

cat 1.sml
val h0 = NetHostDB.addr(valOf(NetHostDB.getByName "localhost"))
val h1 = valOf(NetHostDB.fromString "127.0.0.1")
val _ = (if h0 = h1 then print "OK\n" else print "ERROR\n")
poly --script 1.sml
OK


Nick.

2016-06-20 16:02 GMT+03:00 David Matthews <david.matth...@prolingua.co.uk>:

It's not actually a bug with Socket.connectNB.  There was a bug in
NetHostDB.scan and NetHostDB.fromString which meant that IP addresses such
as 127.0.0.1 were not handled correctly.  This was fixed in git master in
commit 0d050ae45.  You can work around the problem using
NetHostDB.getByName "localhost".

David


On 20/06/2016 10:21, Kostirya wrote:

Hello, all.

Socket.connectNB behaves oddly in Poly/ML.

We get raise SysErr immediately after Socket.connectNB to a non-existent
server.
However, it is a nonblocking connect, so we should get information about
unsuccesful connecton only after socket access.

The source code is attached and here is the results for Poly/ML:

./a.out

exc in 2 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
exc in 3 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
exc in 4 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
.
.
^C

./a.out

exc in 1 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
exc in 2 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
exc in 3 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
exc in 4 socket: SysErr ("Connection refused", SOME ECONNREFUSED)
.
.
^C

We usually get errors in this situation. I've tested on Linix and FreeBSD.

MLton and SML/NY don't get errors in the same situation.

NIck.



_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml




_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

_______________________________________________
polyml mailing list
polyml@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to