Chapter 24
Socket Interface
• Sockets
• Socket System Calls
• Connectionless Iterative Server
• UDP Client-Server Programs
• Connection-Oriented Concurrent Server
• TCP Client-Server Programs
s_addr
in_addr
struct in_addr
{
u_long s_addr ;
};
...
sin_len sin_family sin_port sin_addr sin_zero
sockaddr_in
struct sockaddr_in
{
u_char sin_len ;
u_short sin_family ;
u_short sin_port ;
struct in_addr sin_addr ;
char sin_zero [8] ;
};
...
sin_len sin_family sin_port sin_addr sin_zero
...
sin_len sin_family sin_port sin_addr sin_zero
Remote Socket Address
Socket
Application program
Stream Datagram
socket socket Raw
interface interface socket
interface
TCP UDP
IP
MS byte LS byte
Data 00001010 00010111 00001110 00000110
Memory
00001010 A
00010111 A+1
00001110 A+2
00000110 A+3
MS byte LS byte
Data 00001010 00010111 00001110 00000110
Memory
00000110 A
00001110 A+1
00010111 A+2
00001010 A+3
16-bit 32-bit
16-bit 32-bit
inet_ntoa inet_aton
int memcmp ( const void *first , const void *second , int len ) ;
alias address
eman
alias address
.. ..
. .
AF_INET 4
h_name h_aliases h_addrtype h_length h_addr_list
hostent
struct hostent
{
char *h_name ;
char **h_aliases ;
int h_addrtype ;
int h_length ;
char **h_addr_list ;
};
Forouzan Notes COSC 6377 - Fall 2000 24-15
AF_INET SOCK_DGRAM 0
SOCK_STREAM
int bind (int sockfd , const struct sockaddr_in *localaddr , int localaddrlen) ;
int connect (int sockfd , const struct sockaddr_in *serveraddr , int serveraddrlen ) ;
int accept (int sockfd , const struct sockaddr_in *clientaddr , int *clientaddrlen) ;
int sendto (int sockfd , const void *buf , int buflen , int flags ,
const struct sockaddr_in *toaddr , int toaddrlen ) ;
int recvfrom (int sockfd , const void *buf , int buflen , int flags
const struct sockaddr_in *fromaddr , int *fromaddrlen ) ;
socket (...)
Clients
Repeat
as needed
Requests Repeat infinitely
sendto (...)
recvfrom (...)
Process
sendto (...)
Responses
recvfrom (...)
close (...)
socket (...)
listen (...)
Client
socket (...)
Repeat infinitely
Connection request
connect (...)
accept (...)
fork (...)
close close
(listening) (accepting)
Repeat
as needed Parent server
request
read (...)
Process
write (...)
response
Child server
close (...)
Parent
b. After accept
Parent Child
c. After fork
Parent Child
Parent Child