ABSTRACT

When facilities for InterProcess Communication (IPC) and networking were added to UNIX, the approach was to make the application programming interface (API) of IPC similar to that of the file I/O. In UNIX, a process has a set of I/O descriptors so that it reads from, and writes to, I/O devices. These descriptors may refer to files, devices, or communication channels, aka sockets. The lifetime of a descriptor is made up of three phases:

(1) Creation (open socket) (2) Reading and writing (receive from and send to socket) (3) Destruction (close socket)

RFC 147 defined a socket in 1971 [1]. Berkeley’s socket application programming interface (API), also known as the Berkeley Software Distribution (BSD) socket API, provides direct control of both TCP and UDP packets. The UDP packet has a size limit of 64 kilobytes for datagrams, while the TCP packet has no limit. The Windows Sockets API (WSA), aka Winsock, is a specification that defines how Windows network software should access network services, especially TCP/ IP, and it is based on the Berkeley sockets API model. As the Berkeley socket API evolved over time, the POSIX socket API became the latest specification as outlined in ISO/IEC 9945:2009 and IEEE Standard 1003.1. RFC 3542 [2] provides the sockets Application Program Interface (API) which supports IPv6 applications.