RFC 143 (rfc143) - Page 1 of 4


Regarding proffered official ICP



Alternative Format: Original Text Document



Network Working Group                                         W. Naylor
Request for Comments #143                                     J. Wong
NIC #6728                                                     C. Kline
Categories:  D.1, D.3                                         J. Postel
Obsoletes:  None                                              UCLA - NMC
Updates:  123, 145                                            3 May 1971

                    Regarding Proferred Official ICP

We should like to comment on a race condition discovered in the ICP as
proposed in NWG/RFC #123.  The problem arises when the server attempts
to initiate a second connection to the user's receive socket and the
first connection is not yet closed.  Using a similar notation to that of
NWG/RFC #123 the following table illustrates the sequence of events in
the proferred and proposed ICP.  The last two columns indicate which
actions must be completed before the current action may be initiated.
User and Server are third level programs, and UNCP and SNCP are the
users NCP and Servers NCP respectively.  Allocates have not been
included since they add nothing to the argument.

                                               Required Predecessors
                                               ---------------------
Reference #   Action              Initiator   "Proferred"   Proposed
-----------   ------              ---------   -----------   --------
    1         Listen(L,32)        Server           --          --

    2         Init(U,L,32)        User             --          --

    3         RTS(U,L,'l')        UNCP             2           2

    4         STR(L,U,32)         SNCP          1 and 3     1 and 3

    5         Send(L,S)           Server           4           4

    6         SEND('l',S)         SNCP             5           5

    7         RECEIVE('l',S)      UNCP             6           6

    8         Receive(U,S)        User             7           7

    9         Close(L)            Server           5           5

   10         CLS(L,U)            SNCP          9 and 7     9 and 7

   11         Close(U)            User             8        not used

   12         CLS(U,L)            UNCP            11          10