Internet UDP datagram
sockets
provide bidirectional flow of data with record boundaries preserved.
However, messages are not guaranteed to be reliably delivered. If
a message is delivered, there is no guarantee that it is in sequence
and unduplicated, but the data in the message are guaranteed to
be intact.
Datagram sockets allow you to send and receive messages without
establishing a connection. Each message includes a destination address.
Processes involved in data transfer are not required to have a client-server
relationship; the processes can be symmetrical.
Unlike stream sockets, datagram sockets allow you to send
to many destinations from one socket, and receive from many sources
with one socket. There is no two-process model, although a two-process
model is the simplest case of a more general multiprocess model.
The terms server and client
are used in this chapter only in the application sense. There is
no difference in the calls that must be made by the processes involved
in the data transfer.
For example, you might have a name server process that receives
host names from clients all over a network. That server process
can send host name and internet address combinations back to the clients.
This can all be done with one UDP socket.
The simplest two-process case is used in this chapter to describe
BSD Sockets using datagram sockets.
The following table lists the steps involved in exchanging
data between datagram sockets.
Table 4-1 Exchanging
Data Between Internet Datagram Sockets
Client Process Activity | System Call Used | Server Process Activity | System
Call Used |
---|
create a socket | socket() | create a socket | socket() |
bind a socket address | bind() | bind a socket address | bind() |
send message | sendto()
or sendmsg() | | |
| | receive message | recvfrom()
or recvmsg() |
| | send message | sendto()
or sendmsg() |
receive
message | recvfrom()
or recvmsg() | | |
Each of these steps or activities is described in more detail
in the following sections. The description of each activity specifies
a system call and includes:
What happens when
the system call is used.
How the call interacts with other BSD Sockets system
calls.
Where to find details on the system call.
The datagram socket program examples are at the end of these
descriptive sections. You can refer to the example code as you work
through the descriptions.