On Feb 11, 2005, at 10:48 AM, John Rule wrote:

I noticed that when a socket (regular or datagram) is opened to Windows
(via my app that is listening on port 1901), an 'alias' port is given
instead of the 'real' one. For example, if my external device (computer,
PDA, etc.) connects to socket 192.168.77.10:1901 for communications, the
actual socket reported is a random number (like 1407), and it changes each
time the device connects (incrementally..1408, 1409, 1410).

In TCP/IP both TCP and UDP uses the notion of ports.

TCP uses connections and might be easier to explain. When computer or device 10.0.0.1 makes a TCP connection to port 1901 on 192.168.77.10, it needs to assign a port on 10.0.0.1. In most socket APIs the program requesting the connection may specify the port to use on 10.0.0.1, however in most cases it does not and the communications system assigns it. The connection if fully specified by the two address-port pairs. Typical socket implementations exploit that and allow multiple connections to a passive (listening) end. Those are all distinct.

So a connection (from the view of 10.0.0.1) is specified by this:

     Remote IP address = 192.168.77.10
     Remote port       = 1901
     Local IP          = 10.0.0.1
     Local port        = 1407

Every IP packet has similar information in the header

In Revolution when a connection callback (message) comes in, the IP address and the port of the other end are provided. If the connection is broken (or not, actually) and the other end makes another connection it is likely to be using another port. Ports must wait a short time before they can be reused, so typically systems just go to the next one if a port is not specified.

There are cases in which the process opening the port needs to specify the port or at least find out what it is. Unfortunately there is no way to do that in Revolution. For most protocols this is not needed. Since Revolution hides the local port number, if you make multiple connections to the same listener, you need to specify an socket id name or number in the open.

On the other hand, Revolution accept has no way to specify the IP address on a multihomed system.

If you are listening on both TCP and UDP on the same port number, they can be confused in Revolution.

UDP is connectionless, but is often handled as though it is a connection in sockets implementations and especially the view in Revolution. The same concepts apply roughly. (UDP is sort of a stepchild so folks don't worry about getting it right. Windows XP handles UDP errors poorly. Most Unix systems don't broadcast in a way consistent with the intent of UDP; I argue it is wrong.)

If I missed what you are getting at, I apologize and will try to target that.

Dar

--
**********************************************
    DSC (Dar Scott Consulting & Dar's Lab)
    http://www.swcp.com/dsc/
    Programming Services and Software
**********************************************

_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to