Robert M. Münch napsal(a):
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA384
>
> Hi, to track down my problem with the communication between my DLL and Rebo=
> l via sockets I tried to create a Rebol only example. Looks like it has the=
>  same problem. Here is my code (much simpler than the DLL code):
>
>
> =3D=3D=3D Server
> rebol []
>
> c-port: 12345
> listen:       open join tcp://: c-port
>
> waitports: [listen]
>
> print "Listening:"
> forever [
>       ; wait until something happens
>       connection: wait waitports
>
>       if same? connection listen [
>               print [tab "Connected"]
>
>               print [tab "Read message from c-side"]
>               c-client: first connection
>               wait c-client
>               print copy c-client
>
>               print [tab "Send answer to c-side"]
>               insert connection "r-side"
>   
;-------------------

Bug here - it should be - insert c-client. You can't insert into 
listening socket, just to derived connection channel. But - your script 
will not even get here. You use blocking synchronous communication. In 
this mode, it seems to me, that you stay stuck in the 'copy section, 
untill you close the connection on the other side. Hopefully it could be 
proved by checking the WireShark ...

I don't use any other mode than open/direct/no-wait .... you have to be 
just carefull here - you need to "wait", or the program runs out ... In 
your while look, when reading out the data, you can receive empty result 
= no data, or none = other side closed the connection .... If you want 
better multiplexing, it would be probably better to build wait block, 
along with time interval, so you either get your processing by an event 
received from network, or time timeout ....

Here's small examples:

client: open/direct/no-wait tcp://localhost:9005

data: read %user.r

forever [
   print "Sending data"
   insert client data
   wait 5
]

----------------------------
server: open/direct/no-wait tcp://:9005

conn: first wait server
print "Got connection ..."

forever [
   wait conn
   while [not empty? data: copy conn][print ["Read: " length? data]]
]


-pekr-


-- 
To unsubscribe from the list, just send an email to 
lists at rebol.com with unsubscribe as the subject.

Reply via email to