SocketObject:
TYPE =
RECORD [
next: SocketHandle, -- used only by the router
every socket has a buffer pool, which is protected outside the socketRouterLock lock
pool: BufferDefs.BufferAccessHandle,
the buffer pool object if it is a private one
socketRouterLock monitor protected data and condition variables
localAddr: NSAddress.NetworkAddress,
channelState: Socket.State,
waitTime: Socket.WaitTime,
completedUserGetQueue: BufferDefs.Queue,
newUserInput: CONDITION];
SocketHandleToChannelHandle:
PROCEDURE [sH: SocketHandle]
RETURNS [ChannelHandle] = INLINE
BEGIN RETURN[LOOPHOLE[sH, ChannelHandle]]; END;
ChannelHandleToSocketHandle:
PROCEDURE [cH: ChannelHandle]
RETURNS [SocketHandle] = INLINE BEGIN RETURN[LOOPHOLE[cH, SocketHandle]]; END;