The implementation developed creates a new pseudoprotocol,
SOCK SEEK STREAM. This protocol uses the
same tcp stack that normal SOCK STREAM sockets use;
however, the functions have been modified so that a socket
of type SOCK SEEK STREAM may be seeked upon. If a
socket call is on a non-seekable socket, or if the call is not a
seeking receive, then the path through the TCP stack and its
functions is nearly identical to a stock linux kernel. However,
if a seeking call takes place on a seekable socket, then
the path through the TCP stack is the same while the path
through individual functions may vary. The main changes
are in the tcp recvmsg() function. The changes to
this function implement all the modifications necessary to
manage the holes list, sequence numbers, and already read
skb’s. The one notable change to the tcp recvmsg()
function during a seekable socket receive is that the TCP
prequeue mechanism is disabled. The TCP prequeue mechanism
allows for better management of stream resources
in exchange for a slight decrease in performance. Also,
the prequeue cannot be easily modified to allow for seeking.
Therefore, the prequeue mechanism has been disabled
whenever receiving on a seekable socket.