DOi: 10.1145/1516046.1516061
Article development led by
queue.acm.org
High bandwidth, low latency, and
multihoming challenge the sockets API.
By GeORGe V. neViLLe-neiL
Whither
sockets?
onE oF thE
most pervasive and longest-lasting
interfaces in software is the sockets API. Developed
by the Computer Systems Research Group at the
University of California at Berkeley, the sockets API
was first released as part of the 4.1c BSD operating
system in 1982. While there are longer-lived APIs—
for example, those dealing with Unix
file I/O—it is quite impressive for an
API to have remained in use and largely
unchanged for 27 years. The only major
update to the sockets API has been the
extension of ancillary routines to accommodate the larger addresses used
by IPv6.2
The Internet and the networking
world in general have changed in very
significant ways since the sockets API
was first developed, but in many ways
the API has had the effect of narrowing the way in which developers think
about and write networked applications. This article briefly examines
some of the conditions present when
the sockets API was developed and considers how those conditions shaped
the way in which networking code was
written. Later, I look at ways in which
developers have tried to get around
some of the inherent limitations in the
API and address the future of sockets
in a changing networked world.
The two biggest differences between the networks of 1982 and 2009
are topology and speed. For the most
part it is the increase in speed rather
than the changes in topology that people notice. The maximum bandwidth
of a commercially available long-haul
network link in 1982 was 1.5Mbps. The
Ethernet LAN, which was being deployed at the same time, had a speed of
10Mbps. A home user—and there were
very few of these—was lucky to have a
300bps connection over a phone line to
any computing facility. The round-trip
time between two machines on a local
area network was measured in tens of
milliseconds, and between systems
over the Internet in hundreds of milliseconds, depending of course on location and the number of hops a packet
would be subjected to when being routed between machines. (See page 52 for
a look at the early Internet.)
The topology of networks at the time
was relatively simple. Most computers
had a single connection to a local area
network; the LAN was connected to a
primitive router that might have a few
connections to other LANs and a single