Socket.Mesa
Copyright © 1985 by Xerox Corporation. All rights reserved.
BLyon on: January 27, 1981 5:10 PM
DIRECTORY
BufferDefs USING [OisBuffer],
OISCPTypes USING [WaitTime],
NSAddress USING [NetworkAddress];
Socket: DEFINITIONS = BEGIN
definitions
various types used by socket channels.
ChannelHandle: TYPE = REF ChannelObject;
ChannelObject: TYPE;
TransferStatus: TYPE = {
pending, goodCompletion, aborted, noRouteToNetwork, hardwareProblem,
invalidDestAddr,
the following apply to circuit-like media only and mostly to the first packet sent
noAnswerOrBusy, -- auto-dial case only
noTranslationForDestination, -- no phone number for this destination
circuitInUse, -- being used to talk to another destination
circuitNotReady, -- dial the phone or connect modems (non-auto-dial case)
noDialingHardware, dialerHardwareProblem};
SocketStatus: TYPE = RECORD [
localAddr: NSAddress.NetworkAddress, state: State, incompleteGets: CARDINAL];
State: TYPE = {active, aborted};
WaitTime: TYPE = OISCPTypes.WaitTime; -- msecs
constants used by the client.
uniqueNetworkAddr: READONLY NSAddress.NetworkAddress;
defaultWaitTime: WaitTime = 60000; -- msecs
maxInternetOISPktLength: CARDINAL = 576; -- in bytes and includes header
interface
exported by SocketImpl.
procedures
AssignNetworkAddress: PROCEDURE RETURNS [NSAddress.NetworkAddress];
Create: PROCEDURE [
local: NSAddress.NetworkAddress, send: CARDINAL ← 1,
maximum no. of send buffers used at one time
receive: CARDINAL ← 2, -- maximum no. of receive buffers used at one time
reserve: CARDINAL ← 0, -- more buffers can be allocated but not used
privateBuffers: BOOLEANTRUE]
True => the buffers will be ALLOCATED for this channel; False => buffers will be shared will the system's buffers (and no new buffers will be allocated; examples of these are the EchoServer and NetworkStream Listeners). Be careful - False values can deadlock the system; users should only use one buffer at a time and return it asap without trying to grab other resources (or other buffers).
RETURNS [ChannelHandle];
Delete: PROCEDURE [cH: ChannelHandle];
Abort: PROCEDURE [cH: ChannelHandle];
Reset: PROCEDURE [cH: ChannelHandle];
GetStatus: PROCEDURE [cH: ChannelHandle] RETURNS [SocketStatus];
SetWaitTime: PROCEDURE [cH: ChannelHandle, time: WaitTime];
sending and receiving packets - they are in real buffers
PutPacket: PROCEDURE [cH: ChannelHandle, b: BufferDefs.OisBuffer];
asynchronous, return is immediate; when the buffer is finally sent the dispatcher calls b.requeueProcedure[b] to relinquish system ownership of the buffer. If the error ChannelAborted ocurs then the caller still own the buffer, b. This procedure does not attemp to broadcast a packets to ALL nets; use PutPacketToAllConnectedNets for that.
PutPacketToAllConnectedNets: PROCEDURE [cH: ChannelHandle, b: BufferDefs.OisBuffer]; -- this procedure broadcast a packet to all hosts on all locally connected nets. The user only need supply the destination socket number of the packet.
GetPacket: PROCEDURE [cH: ChannelHandle] RETURNS [b: BufferDefs.OisBuffer];
this waits - for a packet to arrive or a TimeOut or an ChannelAborted.
errors
TimeOut: ERROR; -- error when timeout ocurrs on blocked call like TransferWait
ChannelAborted: ERROR; -- error when state is aborted
ChannelError: ERROR;
error when bad software structuring, or bad parameter to calls
END.
LOG
(trimmed to Teak)
Time: January 22, 1980 8:57 PM By: Dalal Action: modified SocketStatus.
Time: January 26, 1980 10:12 AM By: Dalal Action: made ChannelHandle LONG.
Time: March 11, 1980 3:21 PM By: BLyon Action: Put, Get use PhysicalRecordHandles instead of CrateHandles. Added Reset.
Time: June 18, 1980 2:23 PM By: BLyon Action: use NSAddress instead of NSAddress;
uniqueNetworkAddr from CONSTANT to READONLY, ChannelHandle & GetHandle are opaque types.
Time: August 6, 1980 10:17 AM By: Garlick Action: Added several TransferStatus's for circuit-oriented network errors.
Time: October 10, 1980 4:50 PM By: Garlick Action: Added TransferStatus noAnswerOrBusy
Time: January 6, 1981 2:21 PM By: BLyon Action: Post Mokelumne rework.