Search code examples
tcprebolrebol3

How do I get the remote IP-Address of clients connecting to a Rebol3 based server?


I'm playing with these basic TCP test scripts and would like to know: "How to get the IP-Address of clients connecting to the server?"

Any ideas? I tried to probe a client subport at the server-side, but it doesn't show the remote-ip.

Can someone give me hints on gathering that information. I know how it works within Rebol2, but I'm not familiar with the Rebol3 port model.


Solution

  • You can obtain that information by calling QUERY on the client port!, which will return an object with remote-ip and remote-port fields.

    Here's a simple example illustrating this, with a simple service that listens for connections on port 9090 and prints the address of clients connecting to that service:

    rebol []
    
    awake-server: func [event /local client info] [
        if event/type = 'accept [
            client: first event/port
            info: query client
            print ajoin ["Client connected: " info/remote-ip ":" info/remote-port]
            close client
        ]
    ]
    
    serve: func [endpoint /local listen-port] [
        listen-port: open endpoint
        listen-port/awake: :awake-server
        wait listen-port
    ]
    
    serve tcp://:9090