|
|
If the transport provider cannot process a datagram that was passed to it by t_sndudata, it will return a unit data error event, T_UDERR, to the user. This event includes the destination address and options associated with the datagram, plus a protocol-specific error value that describes what may be wrong with the datagram. The reason a datagram could not be processed is protocol-specific. One reason may be that the transport provider could not interpret the destination address or options. Each transport protocol is expected to specify all reasons why it is unable to process a datagram.
The transaction server will be notified of this error event when it attempts to receive another datagram. In this case, t_rcvudata will fail, setting t_errno to TLOOK. If TLOOK is set, the only possible event is T_UDERR, so the server calls t_rcvuderr to retrieve the event. The second argument to t_rcvuderr is the t_uderr structure that was allocated earlier. This structure is filled in by t_rcvuderr and has the following format:
struct t_uderr { struct netbuf addr; struct netbuf opt; long error; }where addr and opt identify the destination address and protocol options as specified in the bad datagram, and error is a protocol-specific error code that specifies why the provider could not process the datagram. The transaction server prints the error code and then continues by entering the processing loop again.