Transcript Chapter 21

The Socket Interface
Chapter 21
Application Program Interface (API)



Interface used between application programs and
TCP/IP protocols
Will look at one example that is a de facto
standard
Things to keep in mind
Application/protocol interaction not in the standards

Distinguish between interface and protocols
In practice, details of interface depend on OS
Example is from BSD UNIX operating system


Is a widely accepted, de facto standard
Operations listed are NOT part of the TCP/IP standards
UNIX I/O Paradigm
Unix is a process oriented OS


Applications execute as a user level process
Application interacts with OS via system calls
Act just like procedure calls
I/O is open-read-write-close



Call open to get file descriptor for file or device
Call read or write to do I/O
Call close to indicate done with object
Adding Network I/O to UNIX
Originally, all I/O was open-read-write-close
Needed to add network protocols to UNIX

Interactions more complex
Passive server code as well as active client code
Specify datagram address when send vs when open


Abandoned the above paradigm
Additions made I/O interface more complex
Needed general mechanism for any protocol interface
Socket Abstraction
Socket is basis for network I/O



Mechanism that provides an endpoint for
communication
Create when needed; get integer to reference
Application can choose address binding method
TCP connection

Both endpoints must be specified
Use for UDP


Remote endpoint can be left unspecified
Pass as argument each time message is sent
Creating a Socket
Use socket function to create a socket
result = socket(pf, type, protocol)


pf specifies protocol family
type specifies communication type
Reliable stream; connectionless datagram; raw

protocol specifies a specific protocol in the family
Need more than just family and type
Ex: pipe in UNIX family cannot do packet delivery
Programmer must know protocol family well
Socket Inheritance & Termination
Two system calls used to start new
application programs

fork
Creates separate copy of currently executing process
New copy inherits all open file descriptors & sockets

exec
Desired application program loaded into the process
Still retains access to inherited sockets (and FDs)
Both old and new processes share the
existing sockets

OS keeps a count associated with each socket
Knows how many applications are using it

Programmer must ensure it is done in a
meaningful way
To close a socket:
close(socket)


Or, open sockets closed upon process termination
close actually decrements count; destroy socket
when it reaches zero
Specifying a Local Address
Upon creation, sockets have no association
to local or destination addresses

TCP/IP
No local protocol port number has been assigned
No destination port or IP address has been specified

Client may not care what local address is
Server process at well-know port will care
Uses bind function to establish specific local addrs
Connecting Sockets to Destination
Addresses
Initially, sockets are unconnected




Not associated with any remote destination
Function connect binds a permanent destination
Form:
connect(socket, destaddr, addrlen)
Semantics depend upon underlying protocol
Reliable stream service: build TCP connection
Connectionless service: stores dest address locally
Sending Data Through a Socket
Sockets are used to transmit data

Five possible functions
write



write(socket, buffer, length)
buffer contains the address of the data to be sent
Works with connected sockets only
writev



writev(socket, iovector, vectorlen)
iovector contains a sequence of pointers to blocks of bytes
Works with connected sockets only
send




send(socket, message, length, flags)
message gives the address of the data
flags controls the transmission
Works with connected sockets only
sendto


sendto(socket, message, length, flags, destaddr,
addrlen)
destaddr specifies the socket address structure
sendmsg



sendmsg(socket, messagestruct, flags)
messagestruct is a structure with the required
information
Used when sendto makes the program inefficient or
hard to read
Receiving Data Through a
Socket
Analogous five input functions





read(descriptor, buffer, length)
readv(descriptor, iovector, vectorlen)
recv(socket, buffer, length, flags)
recfrom(socket, buffer, length, flags, fromaddr,
addrlen)
recmsg(socket, messagestruct, flags)
Text gives examples of many socket
functions and library routines

Can read over at your convenience
How a Server Accepts Connections
Once a socket is established, the server
waits for a connection

Uses function accept to do so
newsock = accept(socket, addr, addrlen)
When a request arrives:




addr and addrlen filled in
New socket created that has destination connected to client
Original socket still remains open
Call to accept returns

Server can handle connections one of two ways
Iteratively

Server handles request, closes new socket, calls accept
Concurrently



Master creates slave to handle request at new socket
Closes its copy of the new socket
Calls accept
Slave closes socket when it finishes, and then terminates
Multiple processes will be using same local protocol port
Ok because pair of endpoints defines a connection
Master server has wildcard in foreign destination
All other processes have a specific foreign dest
Socket Library Calls
Socket API also offers set of library routines

Perform useful functions related to networking
System calls pass control to computer’s OS
Library routines are like other program procedures
Figure 21.5

Many socket library routines provide database
services
Determine names of machines & network services
Determine protocol port numbers
Find out other related information

Sections 21.19 - 21.25 examine groups of
library routines
Example Client & Server
Text gives example C program using the
socket API to access TCP/IP protocols


Implements simple whois client & server
Client is an application that a user invokes
Two arguments: name of remote machine and user
Creates socket, uses TCP, binds socket to whois port

Server only slightly more complex
Listens on well-know whois port
Returns requested info from UNIX password file
Summary
API for TCP/IP depends on details of OS


Because TCP/IP protocol SW resides inside OS
Interface not specified by protocol standard
Examined socket API



Originally designed for BSD UNIX
Widely used by many vendors (like Microsoft)
Uses UNIX open-read-write-close paradigm

To use TCP, application program must:
Create socket
Bind addresses to it
Accept incoming connections
Communicate using read or write primitives
Close when finished


Many library routines available, also
Socket interface is popular and widely supported
If not have socket facilities in OS, often provide socket
library

Underlying OS will use different set of system calls