plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

flush.9p (2502B)


      1 .TH FLUSH 9P
      2 .SH NAME
      3 flush \- abort a message
      4 .SH SYNOPSIS
      5 .ta \w'\fLTflush 'u
      6 .IR size [4]
      7 .B Tflush
      8 .IR tag [2]
      9 .IR oldtag [2]
     10 .br
     11 .IR size [4]
     12 .B Rflush
     13 .IR tag [2]
     14 .SH DESCRIPTION
     15 When the response to a request is no longer needed, such as when
     16 a user interrupts a process doing a
     17 .IR read (9p),
     18 a
     19 .B Tflush
     20 request is sent to the server to purge the pending response.
     21 The message being flushed is identified by
     22 .IR oldtag .
     23 The semantics of
     24 .B flush
     25 depends on messages arriving in order.
     26 .PP
     27 The server should answer the
     28 .B flush
     29 message immediately.
     30 If it recognizes
     31 .I oldtag
     32 as the tag of a pending transaction, it should abort any pending response
     33 and discard that tag.
     34 In either case, it should respond with an
     35 .B Rflush
     36 echoing the
     37 .I tag
     38 (not
     39 .IR oldtag )
     40 of the
     41 .B Tflush
     42 message.
     43 A
     44 .B Tflush
     45 can never be responded to by an
     46 .B Rerror
     47 message.
     48 .PP
     49 The server may respond to the pending request before
     50 responding to the
     51 .BR Tflush .
     52 It is possible for a client to send multiple
     53 .B Tflush
     54 messages for a particular pending request.  Each
     55 subsequent
     56 .B Tflush
     57 must contain as
     58 .I oldtag
     59 the tag of the pending request (not a previous
     60 .BR Tflush ).
     61 Should multiple
     62 .BR Tflush es
     63 be received for a pending request, they must be answered in
     64 order.  A
     65 .B Rflush
     66 for any of the multiple
     67 .BR Tflush es
     68 implies an answer for all previous ones.  Therefore, should
     69 a server receive a request and then multiple flushes for that
     70 request, it need respond only to the last flush.
     71 .PP
     72 When the client sends a 
     73 .BR Tflush ,
     74 it must wait to receive the corresponding
     75 .B Rflush
     76 before reusing
     77 .I oldtag
     78 for subsequent messages.
     79 If a response to the flushed request is received before the
     80 .BR Rflush ,
     81 the client must honor the response
     82 as if it had not been flushed,
     83 since the completed request may signify a state change in the server.
     84 For instance,
     85 .B Tcreate
     86 may have created a file and
     87 .B Twalk
     88 may have allocated a fid.
     89 If no response is received before the
     90 .BR Rflush ,
     91 the flushed transaction is considered to have been canceled,
     92 and should be treated as though it had never been sent.
     93 .PP
     94 Several exceptional conditions are handled correctly by the above specification:
     95 sending multiple flushes for a single tag,
     96 flushing after a transaction is completed,
     97 flushing a
     98 .BR Tflush ,
     99 and flushing an invalid tag.
    100 .SH ENTRY POINTS
    101 The
    102 .MR 9pclient (3)
    103 library does not generate
    104 .B flush
    105 transactions..
    106 .MR 9pserve (4)
    107 generates
    108 .B flush
    109 transactions to cancel transactions pending when a client hangs up.