|
Definition
Sockets are interfaces that
can "plug into" each other over a network. Once so "plugged in",
the programs so connected communicate. A "server" program is exposed
via a socket connected to a certain /etc/services port number. A "client"
program can then connect its own socket to the server's socket, at which time
the client program's writes to the socket are read as stdin to the server program,
and stdout from the server program are read from the client's socket reads.
Before a user process can perform
I/O operations, it calls Open to specify and obtain permissions for the file or
device to be used. Once an object has been opened, the user process makes one
or more calls to Read or Write data. Read reads data from the object and transfers
it to the user process, while Write transfers data from the user process to the
object. After all transfer operations are complete, the user process calls Close
to inform the operating system that it has finished using that object. When
facilities for InterProcess Communication (IPC) and networking were added, the
idea was to make the interface to IPC similar to that of file I/O. In Unix, a
process has a set of I/O descriptors that one reads from and writes to. These
descriptors may refer to files, devices, or communication channels (sockets).
The lifetime of a descriptor is made up of three phases: creation (open socket),
reading and writing (receive and send to socket), and destruction (close socket).
History Sockets
are used nearly everywhere, but are one of the most severely misunderstood technologies
around. This is a 10,000 foot overview of sockets. It's not really a tutorial
- you'll still have work to do in getting things working. It doesn't cover the
fine points (and there are a lot of them), but I hope it will give you enough
background to begin using them decently.I'm only
going to talk about INET sockets, but they account for at least 99% of the sockets
in use. And I'll only talk about STREAM sockets - unless you really know what
you're doing (in which case this HOWTO isn't for you!), you'll get better behavior
and performance from a STREAM socket than anything else. I will try to clear up
the mystery of what a socket is, as well as some hints on how to work with blocking
and non-blocking sockets. But I'll start by talking about blocking sockets. You'll
need to know how they work before dealing with non-blocking sockets. Part
of the trouble with understanding these things is that "socket" can
mean a number of subtly different things, depending on context. So first, let's
make a distinction between a "client" socket - an endpoint of a conversation,
and a "server" socket, which is more like a switchboard operator. The
client application (your browser, for example) uses "client" sockets
exclusively; the web server it's talking to uses both "server" sockets
and "client" sockets. Of the various forms of IPC (Inter Process
Communication), sockets are by far the most popular. On any given platform, there
are likely to be other forms of IPC that are faster, but for cross-platform communication,
sockets are about the only game in town. They
were invented in Berkeley as part of the BSD flavor of Unix. They spread like
wildfire with the Internet. With good reason -- the combination of sockets with
INET makes talking to arbitrary machines around the world unbelievably easy (at
least compared to other schemes).
<<back |