<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi,</p>
    <p>A good question, and a very good point. <br>
    </p>
    <p>Yes, what <i>should</i> be done is to listenOn: 0, and then <i>use
        that socket</i>, not close it and then try to open another one
      on the same port number. Definitely a race condition; that port
      number could be grabbed by someone else in the intervening time.<br>
    </p>
    <p>Regards,</p>
    <p>-Martin<br>
    </p>
    <div class="moz-cite-prefix">On 10/29/24 10:40, r. clayton via
      Cuis-dev wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:1929344815.284637.1730223629980@email.ionos.com">
      <pre wrap="" class="moz-quote-pre">  openPort
      "Answer an open port number"
      | port socket |

      socket := Socket newTCP.
      socket listenOn: 0. "gets an ephemeral port"
      port := socket localPort.
      socket close.
      ^port.

Forgive me for asking a possibly dumb question, but how is this not a race condition waiting to happen?  Ports are a system-wide resource (considering ports above 1023).  What prevents a process elsewhere on the system, not necessarily within Cuis, from allocating the port returned by openPort?

Also, since I'm being picky, "open" is probably not the best choice of words if I'm correctly understanding the code's intention.  Despite being in the vernacular, "open" doesn't doesn't necessarily mean "available" or "unallocated."  You could argue that "open" means "unavailable" and "allocated" (consider TCP to make this argument clear).
</pre>
    </blockquote>
  </body>
</html>