This is how my tcp-server deals with it

wait-ports: none
listen-port: open/no-wait/direct/binary tcp://:9999
wait-ports: [ listen-port ]

forever [

        ; Perform asynch wait !!!
        wait wait-ports

        ; Is port descriptor set ? 
        if not ( none? ( wait [ 0 listen-port ] ) ) [

                ; Add port to block
                append wait-ports first listen-port
        ]

        ; Set scope of port checking
        check-ports: next wait-ports

        ; Check port activity ?
        while [ ( length? check-ports ) > 0 ] [

                conn: first check-ports

                ; Is port still active ?
                either query conn [

                        ; Port active  ... so check if any data to be read
                        either not ( none? ( wait [ 0 conn ] ) ) [

                                ; Yes .. so determine size of data to be
read
                                readbuffer: copy #{}
                                readbuffer: copy conn
                
                                ; If length is none? then connection has
been closed 
                                either none? readbuffer [

                                        ; Close down port and tidy up
wait-ports block entry
                                        close conn
                                        remove check-ports

                                ] [


                                        ; Is this NOT a HTTP request ?
                                        either none? ( find readbuffer
"HTTP/1." ) [


                                                ; Remove data from port
                                                clear conn

                                                ; Move onto next port
                                                check-ports: next
check-ports

                                        ] [

                                                ; HTTP request so detrmine
what to do ...

                                                ; Remember it's a
non-persistent connection 
                                                ; Tidy up
                                                clear conn
                                                close conn

                                        ]

                                        ; VIP - empty out buffer area !!!
                                        clear readbuffer

                                ] ; end of either none? readbuffer

                        ] [
                                check-ports: next check-ports
                        ]

                ] [

                        ; Port is no longer active !

                        ; tidy up 
                        clear conn
                        close conn
                        remove check-ports

                ] ; end of query conn

        ] ; end of while ( length? ...

]

quit
-----Original Message-----
From: Maarten Koopmans [mailto:[EMAIL PROTECTED]]
Sent: 09 October 2001 10:00
To: [EMAIL PROTECTED]
Subject: [REBOL] Re: tcp port open?


I know.... but I can't see that in Rebol.

I am thinking of adding 'persistent connections' to Rugby but I need to know

if the pipe is broken in order to do that.

--Maarten

On Tuesday 09 October 2001 10:53, you wrote:
> You should have receive a notification that the connection has dropped
> that's the nature of TCP!
>
>
> -----Original Message-----
> From: Petr Krenzelok [mailto:[EMAIL PROTECTED]]
> Sent: 09 October 2001 09:23
> To: [EMAIL PROTECTED]
> Subject: [REBOL] Re: tcp port open?
>
> Maarten Koopmans wrote:
> > Hi,
> >
> > Is there a way to now if a tcp port is open on both sides. So that a
>
> server
>
> > (or client) can see whether or not the other side of the pipe is still
>
> open?
>
> I am not sure. Designing our camera we looked at Ethereal
> (http://www.ethereal.org) packet monitor, and TCP communication is several
> stages process of various ACK, SYN, RST, PSH, FIN type packets. There is
no
> real
> "connection" on the network, just packets sent here and there. That is why
> someone can watch your packets (sniff) and see what you are sending, if
> connected to the same network. So, alive connection is just some state in
> your
> tcp stack on your side, irrelevant to other side of "connection". There is
> also
> known case of semi-connection - e.g. one side timeouts, and the other side
> is
> still able to send packets, which are really delivered, just not probably
> processed.
>
> So, theoretically, if opposite side sends you FIN or RST assigned packet,
> you
> should note it. This question is, however, for Holger. We have 'query
> function
> available, maybe Rebol somehow knows, if opposite side closed the
> connection?
>
> -pekr-
>
> > Thanks,
> >
> > Maarten
> > --
> > To unsubscribe from this list, please send an email to
> > [EMAIL PROTECTED] with "unsubscribe" in the
> > subject, without the quotes.
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.


**********************************************************************
This email and any attachments may be confidential and the subject of
legal professional privilege.  Any disclosure, use, storage or copying
of this email without the consent of the sender is strictly prohibited.
Please notify the sender immediately if you are not the intended
recipient and then delete the email from your inbox and do not
disclose the contents to another person, use, copy or store the
information in any medium.
**********************************************************************



-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to