caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Kenneth Adam Miller <kennethadammiller@gmail.com>
Cc: caml users <caml-list@inria.fr>
Subject: Re: [Caml-list] Async Server not executing
Date: Tue, 16 Jun 2015 11:48:02 -0400	[thread overview]
Message-ID: <CAK7rcp-37TpynOfDDK2xUoD4Z9KUyujFG0zCQsF9wAWMPPvj0g@mail.gmail.com> (raw)
In-Reply-To: <CAK=fH+jX9=pSYjD_AGu6Qp2UFaaqjSxoj_+9hQ_CaohhsLfGsw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3437 bytes --]

Ah. Well I think I can incorporate from that what I can, but my unit tests
need to be reflective of the use case I have. I'm sending protobuf encoded
messages between two processes on one machine-whatever the size of the
message, that's the size that should be received on the other end (I've
read about the returning partial bytes, I can't decode a part of a proto
message, it has to be the right size).

I can't use write_line, I'll have to find a way to delimit the messages
based on size. I think I'll just prepend every message with the size that
it should expect, and then read a integer off the stream and then that many
bytes.

On Tue, Jun 16, 2015 at 11:41 AM, David House <dhouse@janestreet.com> wrote:

> Ah, now I read your code in more detail I think I see why.
>
> Reader.contents on the server side will block until eof. The client side
> sends some stuff, but does not close the writer, so the server never sees
> eof. (Recall that sockets are not like files: it's possible to read all of
> the available data right now, but not reach eof.)
>
> Network protocols normally have some explicit "this is the end of one
> message" marker, like a newline or something similar. Then the server just
> reads chunks until it sees that marker, at which point it can put the
> message together and to something with it.
>
> For example, you could use Writer.write_line on the client side and
> Reader.read_line on the server side.
>
> On 16 June 2015 at 16:36, Kenneth Adam Miller <kennethadammiller@gmail.com
> > wrote:
>
>> So, now I can get server received if I add that into the callback, but at
>> "writing shutdown to server" I don't see response received or even
>> something for Eof.
>>
>> On Tue, Jun 16, 2015 at 11:09 AM, David House <dhouse@janestreet.com>
>> wrote:
>>
>>> The first thing to try is to make sure that everything is getting
>>> flushed. For temporary debugging messages I strongly recommend just using
>>> [Core.Std.eprintf "<message>\n%!"].
>>>
>>> On 16 June 2015 at 16:03, Kenneth Adam Miller <
>>> kennethadammiller@gmail.com> wrote:
>>>
>>>> I'm having trouble with OCaml Async. I wrote a small server with it,
>>>> and right now I'm trying to unit test that server. Here's my code for the
>>>> server:
>>>>
>>>>
>>>> let _main ()=
>>>>   print_endline "Server running";
>>>>   let handler = print_endline in
>>>>   let socket = Tcp.on_port 5554 in
>>>>   let server = Tcp.Server.create socket (fun addr r w ->
>>>>       (Reader.contents r) >>| handler; (Writer.write w "got it")) in
>>>>   server
>>>>
>>>>
>>>>
>>>> In my unit test code I have:
>>>>
>>>> let test_shutdown test_ctxt = Thread_safe.block_on_async_exn (fun () ->
>>>>  (
>>>>       print_endline "test_shutdown";
>>>>       let server = Server._main () in
>>>>       server >>= fun server ->
>>>>       let where = Tcp.to_host_and_port "127.0.0.1" 5554 in
>>>>       Tcp.connect where >>= fun s ->
>>>>         let socket, r, w = s in
>>>>         ignore (Writer.write w "kill");
>>>>         ignore (Writer.flushed w);
>>>>         (Reader.recv r >>> function
>>>>           | `Ok result ->  print_endline ("writing shutdown to server"
>>>> ^ result)
>>>>           | `Eof -> ());
>>>>         return ()
>>>>     )); ()
>>>>
>>>>
>>>>
>>>> I see test_shutdown and Server running, but not sign of "writing
>>>> shutdown to server" or even "got it"; why isn't my server or even any of
>>>> the connection executing?
>>>>
>>>
>>>
>>
>

[-- Attachment #2: Type: text/html, Size: 21534 bytes --]

  reply	other threads:[~2015-06-16 15:48 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-16 15:03 Kenneth Adam Miller
2015-06-16 15:09 ` David House
2015-06-16 15:36   ` Kenneth Adam Miller
2015-06-16 15:41     ` David House
2015-06-16 15:48       ` Kenneth Adam Miller [this message]
2015-06-16 17:50         ` Kenneth Adam Miller
2015-06-17  8:09           ` David House
2015-06-17 14:57             ` Kenneth Adam Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAK7rcp-37TpynOfDDK2xUoD4Z9KUyujFG0zCQsF9wAWMPPvj0g@mail.gmail.com \
    --to=kennethadammiller@gmail.com \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).