![Page 1: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/1.jpg)
1
Socket Network Programming
02/11/2008
![Page 2: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/2.jpg)
Admin.
Programming assignment 1 update
2
![Page 3: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/3.jpg)
Recap: P2P Scalability
BitTorrent as an example a swarming protocol each peer is given a set (~50) of peers upon
joining piece selection
• random at startup and (local) rarest after that peer selection
• periodically unchoke a few (4) peers with the highest rates sending to me
• optimistic unchoking
3
![Page 4: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/4.jpg)
4
UDP: Connectionless Demux
DatagramSocket serverSocket = new DatagramSocket(9876);
ClientIP:B
P2
client IP: A
P1P1P3
serverIP: S
SP: 9876
DP: 9157
SP: 9157
DP: 9876
SP: 9876
DP: 5775
SP: 5775
DP: 9876
Source Port (SP) provides “return address”
![Page 5: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/5.jpg)
5
Recap: UDP
closeclientSocket
Server (running on hostid)
read reply fromclientSocket
create socket,clientSocket = DatagramSocket()
Client
Create datagram using (hostid, x) as (dest addr. port),send request using clientSocket
create socket,port=x, forincoming request:serverSocket = DatagramSocket( x )
read request fromserverSocket
write reply toserverSocket
Create socket with port number:DatagramSocket sSock = new DatagramSocket(9876);
If no port number is specified, the OS will pick one
generate reply, create datagram using clienthost address, port number
![Page 6: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/6.jpg)
6
UDP Provides Multiplexing/Demultiplexing
server clientUDP socket space
address: {*:9876}snd/recv buf:
128.36.232.5128.36.230.2
address: {128.36.232.5:53}snd/recv buf:
UDP socket space
address: {198.69.10.10:1500}snd/recv buf:
address: {198.69.10.10:4343}snd/recv buf:
198.69.10.10
Packet demutiplexing is based on (dst address, dst port) at dst%netstat –u –n -a
local addresslocal port
![Page 7: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/7.jpg)
7
Example: Java server (UDP)
import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
Createdatagram socket
at port 9876
Create space forreceived datagram
Receivedatagra
m
![Page 8: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/8.jpg)
8
Example: Java server (UDP), cont
String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase();
sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } }
}
Get IP addrport #, of
sender
Write out datagramto socket
End of while loop,loop back and wait foranother datagram
Create datagramto send to client
![Page 9: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/9.jpg)
9
Example: Java client (UDP)
import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
Createinput stream
Create client socket
Translate hostname to IP
address using DNS
![Page 10: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/10.jpg)
10
Example: Java client (UDP), cont.
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); }
}
Create datagram with data-to-send,
length, IP addr, port
Send datagramto server
Read datagramfrom server
![Page 11: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/11.jpg)
11
UDP Connectionless Demux
DatagramSocket serverSocket = new DatagramSocket(9876);
ClientIP:B
P2
client IP: A
P1P1P3
serverIP: S
SP: 9876
DP: 9157
SP: 9157
DP: 9876
SP: 9876
DP: 5775
SP: 5775
DP: 9876
Source Port (SP) provides “return address”
![Page 12: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/12.jpg)
Recap: TCP Provides Connection-Oriented Demux
Webserver S
Web clienthost B
Source IP: BDest IP: S
source port: x
dest. port: 80
Source IP: BDest IP: S
source port: y
dest. port: 80
Web server
Web clienthost A
Source IP: ADest IP: S
source port: x
dest. port: 80
TCP separates data packetsfrom different peers intodifferent sockets
![Page 13: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/13.jpg)
Big Picture: Connection-Oriented TCP
![Page 14: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/14.jpg)
Socket Programming with TCP
Client must contact server server process must first
be running server must have created
socket (door) that welcomes client’s contact
Client contacts server by: creating client-local TCP
socket specifying IP address, port
number of server process When client creates
socket: client TCP establishes connection to server TCP
When contacted by client, server TCP creates new socket for server process to communicate with client allows server to talk
with multiple clients source port numbers
used to distinguish clients
TCP provides reliable, in-order transfer of bytes (“pipe”) between client and server
application viewpoint
![Page 15: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/15.jpg)
TCP Connection-Oriented Demux
TCP socket identified by 4-tuple: source IP address source port number dest IP address dest port number
recv host uses all four values to direct segment to appropriate socket server can easily support many simultaneous TCP
sockets: different connections/sessions are automatically separated into different sockets
![Page 16: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/16.jpg)
16
Connection-Oriented Demux
ClientIP:B
P1
client IP: A
P1P2P4
serverIP: S
SP: x
DP: 80
SP: y
DP: 80
P5 P6 P3
D-IP: SS-IP: A
D-IP: S
S-IP: B
SP: x
DP: 80
D-IP: SS-IP: B
![Page 17: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/17.jpg)
Under the Hood: TCP Multiplexingserver client
TCP socket space
state: listeningaddress: {*:6789, *:*}completed connection queue:sendbuf:recvbuf:
128.36.232.5128.36.230.2
TCP socket space
state: listeningaddress: {*:25, *:*}completed connection queue: sendbuf:recvbuf:
198.69.10.10
state: listeningaddress: {*:25, *:*}completed connection queue: sendbuf:recvbuf:
state: startingaddress: {198.69.10.10:1500, *:*}sendbuf:recvbuf:
local addrlocal port
remote addr
remote port
%netstat –-tcp –all –l -n
![Page 18: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/18.jpg)
Example: Client Initiates Connection
server clientTCP socket space
state: listeningaddress: {*:6789, *.*}completed connection queue:sendbuf:recvbuf:
128.36.232.5128.36.230.2
TCP socket space
state: listeningaddress: {*.25, *.*}completed connection queue:sendbuf:recvbuf:
198.69.10.10
state: listeningaddress: {*.25, *.*}completed connection queue:sendbuf:recvbuf:
state: connectingaddress: {198.69.10.10:1500, 128.36.232.5:6789}sendbuf:recvbuf:
![Page 19: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/19.jpg)
Example: TCP Handshake Doneserver client
TCP socket space
state: listeningaddress: {*:6789, *:*}completed connection queue: {128.36.232.5.6789, 198.69.10.10.1500}sendbuf:recvbuf:
128.36.232.5128.36.230.2
TCP socket space
state: listeningaddress: {*:25, *:*}completed connection queue:sendbuf:recvbuf:
198.69.10.10
state: listeningaddress: {*:25, *:*}completed connection queue:sendbuf:recvbuf:
state: connectedaddress: {198.69.10.10:1500, 128.36.232.5:6789}sendbuf:recvbuf:
![Page 20: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/20.jpg)
Example: Server accept()server client
TCP socket space
state: listeningaddress: {*.6789, *:*}completed connection queue: sendbuf:recvbuf:
128.36.232.5128.36.230.2
TCP socket space
state: listeningaddress: {*.25, *:*}completed connection queue:sendbuf:recvbuf:
198.69.10.10
state: listeningaddress: {*.25, *:*}completed connection queue:sendbuf:recvbuf:
state: connectedaddress: {198.69.10.10.1500, 128.36.232.5:6789}sendbuf:recvbuf:
state: establishedaddress: {128.36.232.5:6789, 198.69.10.10.1500}sendbuf:recvbuf:
Packet sent to the socket with the best match!Packet demutiplexing is based on (dst addr, dst port, src addr, src port)
![Page 21: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/21.jpg)
Client/server socket interaction: TCP
wait for incomingconnection requestconnectionSocket =welcomeSocket.accept()
create socket,port=x, forincoming request:welcomeSocket =
ServerSocket(x)
create socket,connect to hostid, port=xclientSocket =
Socket()
closeconnectionSocket
read reply fromclientSocket
closeclientSocket
Server (running on hostid) Client
send request usingclientSocketread request from
connectionSocket
write reply toconnectionSocket
TCP connection setup
![Page 22: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/22.jpg)
Example
Example client-server app:
1) client reads line from standard input (inFromUser stream) , sends to server via socket (outToServer stream)
2) server reads line from socket3) server converts line to
uppercase, sends back to client
4) client reads, prints modified line from socket (inFromServer stream)
outT
oSer
ver
to network from network
inFr
omS
erve
r
inFr
omU
ser
keyboard monitor
Process
clientSocket
inputstream
inputstream
outputstream
TCPsocket
Clientprocess
client TCP socket
![Page 23: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/23.jpg)
Example: Java client (TCP)
import java.io.*; import java.net.*; class TCPClient {
public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket(“server.name", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
Createinput stream
Create client socket,
connect to server
Createoutput stream
attached to socket
![Page 24: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/24.jpg)
Example: Java client (TCP), cont.
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close(); } }
Createinput stream
attached to socket
Send lineto server
Read linefrom server
![Page 25: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/25.jpg)
Example: Java server (TCP)import java.io.*; import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
Createwelcoming socket
at port 6789
Wait, on welcomingsocket for contact
by client
Create inputstream, attached
to socket
![Page 26: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/26.jpg)
Example: Java server (TCP), cont
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalizedSentence = clientSentence.toUpperCase() + '\n';
outToClient.writeBytes(capitalizedSentence); } } }
Read in linefrom socket
Create outputstream,
attached to socket
Write out lineto socket
End of while loop,loop back and wait foranother client connection
![Page 27: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/27.jpg)
Outline
Recap Socket programming API
UDP TCP implementing a web server
![Page 28: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/28.jpg)
Example: WebServer
A simple web server which supports only simple HTTP/1.0
http://zoo.cs.yale.edu/classes/cs433/programming/examples-java-socket/WebServer/
![Page 29: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/29.jpg)
WebServer Flow
TCP socket space
state: listeningaddress: {*.6789, *.*}completed connection queue: sendbuf:recvbuf:
128.36.232.5128.36.230.2
state: listeningaddress: {*.25, *.*}completed connection queue:sendbuf:recvbuf:
state: establishedaddress: {128.36.232.5:6789, 198.69.10.10.1500}sendbuf:recvbuf:
connSocket = accept()
Create ServerSocket(6789)
read request from connSocket
read local file
write file to connSocket
close connSocketDiscussion: what does each step do and how long does it take?
![Page 30: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/30.jpg)
Writing High Performance Servers: Major Issues
Many socket/IO operations can cause a process to block, e.g., accept: waiting for new connection; read a socket waiting for data or close; write a socket waiting for buffer space; I/O read/write for disk to finish
Thus a crucial perspective of network server design is the concurrency design (non-blocking) for high performance to avoid denial of service
Concurrency is also important for clients!
![Page 31: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/31.jpg)
Writing High Performance Servers: Using Multi-Threads
Using multiple threads so that only the flow
processing a particular request is blocked
Java: extends Thread or implements Runnable interface
Example: a Multi-threaded WebServer, which creates a thread for each request
![Page 32: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/32.jpg)
Problems of Multi-Thread Server
High resource usage, context switch overhead, contended locks
Too many threads throughput meltdown, response time explosion
In practice: bound total number of threads
![Page 33: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/33.jpg)
Event-Driven Programming
Event-driven programming, also called asynchronous i/o Using Finite State Machines (FSM) to monitor the progress of requests Yields efficient and scalable concurrency Many examples: Click router, Flash web server, TP Monitors, etc.
Java: asynchronous i/o for an example see: http://www.cafeaulait.org/books/jnp3/examples/12/
![Page 34: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/34.jpg)
Async I/O in Java
An important class is the class Selector, which is a multiplexer of selectable channel objects example channels: DatagramChannel, Pipe, ServerSocketChannel, SocketChannel
use configureBlocking(false) to make a channel non-blocking
A selector may be created by invoking the open method of this class
![Page 35: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/35.jpg)
Async I/O in Java
A selectable channel registers events (called a SelectionKey) with a selector with the register method
A SelectionKey object contains two operation sets interest Set ready Set
A SelectionKey object has an attachment which can store data often the attachment is a
buffer
Selector
Selection Key
Selectable Channel
register
![Page 36: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/36.jpg)
Async I/O in Java
Call select (or selectNow(), or select(int timeout)) to check for ready events, called the selected key set
Iterate over the set to process all ready events
![Page 37: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/37.jpg)
Problems of Event-Driven Server
Difficult to engineer, modularize, and tune
Little OS and tool support: ‘‘roll your own’’
No performance/failure isolation between FSMs
FSM code can never block (but page faults, garbage collection may still force a block) thus still need multiple threads
![Page 38: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/38.jpg)
38
Backup
![Page 39: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/39.jpg)
39
Example 1: A Relay TCP Client
TCP client
TCP server
writen
readn
fgets
fputs
Check the code at http://zoo.cs.yale.edu/classes/cs433/programming/examples/tcpclient
![Page 40: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/40.jpg)
40
Backup: C/C++ Version
![Page 41: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/41.jpg)
41
Connectionless UDP: Big Picture
sd=Socket(): create socket
bind(sd, …): specify socket local IP address and port number
server client
read()/recv(): receive packets
close(): done
socket(): create socket
close(): done
write()/sendto(): send packets to server, by specifying receiver
address and port number
![Page 42: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/42.jpg)
42
Connection-oriented: Big Picture (C version)
sd=socket(): create socket
bind(sd, …): specify socket address
server client
TCP connection setup
listen(sd, …): specify that socket sd is a listening socket
sd2=accept(sd, …): get a connected connection from the queue for socket sd;
create a new socket identified by sd2
read()/write(): do IO on socket sd2
close(sd2): done
socket(): create socket
bind(): specify socket address
connect(): initialize TCP handshake;return until TCP handshake is done
read()/write(): do IO on the socket
close(): done
optional
![Page 43: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/43.jpg)
43
Unix Programming: Mechanism UNIX system calls and library routines
(functions called from C/C++ programs)
%man 2 <function name>
A word on style: check all return codes
if ((code = syscall()) < 0) {perror("syscall");
}
![Page 44: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/44.jpg)
44
Creating Sockets
#include <sys/types.h>#include <sys/socket.h>int socket(int domain, int type, int protocol);
- creates an endpoint for communication- return value: -1 if an error occurs;
otherwise the return value is a descriptor referencing the socket
- what are the possible outcomes of this system call?
![Page 45: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/45.jpg)
45
Creating Sockets: Parameters
domain : address family (protocol family) determine address structure e.g. AF_UNIX, AF_INET, AF_INET6 we will use AF_INET only
type : service of a socket e.g. SOCK_DGRAM provides unreliable,
connectionless service e.g. SOCK_STREAM provides connection-
oriented reliable byte-stream service
![Page 46: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/46.jpg)
46
Creating Sockets: Parameters (cont.)
protocol : specifies particular protocol Usually already defined by domain and type
(e.g. TCP for AF_INET and SOCK_STREAM; UDP for AF_INET and SOCK_DGRAM)
we will use 0 (default protocol) Example
if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) {
perror(“socket”);exit(1);
}
![Page 47: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/47.jpg)
47
Binding the Address for a Socket
#include <sys/types.h>#include <sys/socket.h>int bind(int sd, struct sockaddr *my_addr,
socklen_t addrlen);
- assigns the local address of a socket- return value: -1 if an error occurs;
otherwise 0- what are the possible outcomes of this
system call?
![Page 48: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/48.jpg)
48
Socket Address
Several types of addresses We will use sockaddr_in (<netinet/in.h>)
struct sockaddr_in {sa_family_t sin_family; /*AF_INET*/uint16_t sin_port; /* network order*/
struct in_addr sin_addr;};struct in_addr {
uint32_t s_addr; /* network order*/};
Two types of byte ordering: little endian, and big endian
![Page 49: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/49.jpg)
49
Internet Addresses and Ports
sin_port 16 bits 0-1024 reserved for system well-known ports are important If you specify 0, the OS picks a port
s_addr 32 bits INADDR_ANY for any local interface address
![Page 50: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/50.jpg)
50
Internet Addresses and Ports: Example
struct sockaddr_in myaddr;
bzero( (char*)myaddr, sizeof(myaddr) );myaddr.sin_family = AF_INET;myaddr.sin_port = htons(80); /* bind to HTTP port*/myaddr.sin_addr.s_addr = htos(INADDR_ANY); /* any address*/
if ( (bind(sockfd, (struct sockaddr*)&myaddr, sizeof(myaddr)) < 0 ) {perror(“bind”);exit(1);
}
![Page 51: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/51.jpg)
51
Set a Socket in the Listening State (Server)
#include <sys/types.h>#include <sys/socket.h>int listen(int sd, int backlog);
- Specify the willingness to accept new connection
- backlog : specify the number of pending connections
- return value: -1 if an error occurs; otherwise 0- what are the possible outcomes of this system
call?
![Page 52: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/52.jpg)
52
Initialize Connection Setup (Client)
#include <sys/types.h>#include <sys/socket.h>int connect(int sd, const struct sockaddr *serv_addr,
socklen_t addrlen);
- For SOCK_STREAM, initialize connection to the server; for SOCK_DGRAM, just set the destination address and set the socket in connected state
- return value: -1 if an error occurs; otherwise 0- what are the possible outcomes of this system
call?
![Page 53: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/53.jpg)
53
Accept a Connection (Server)
#include <sys/types.h>#include <sys/socket.h>int accept(int sd, struct sockaddr *peer_addr,
socklen_t addrlen);
- remove the first connection from the pending connection queue, create a new socket in connected state, the original sd is not changed and still in listening state
- return value: -1 if an error occurs; otherwise the descriptor of the newly connected socket
- what are the possible outcomes of this system call?
![Page 54: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/54.jpg)
54
Read/Write to a Socket
read()/write() of the file interface for connected-oriented
Socket specific system call send()/sendto()/sendmsg() recv()/recvfrom()/recvmsg()
![Page 55: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/55.jpg)
55
Read from a socket by using read()
#include <unistd.h>ssize_t read(int sockfd, void *buf, size_t
count);
- read up to count from the socket- return value: -1 if an error occurs; 0 if
end of file; otherwise number of bytes read
- what are the possible outcomes of this system call?
![Page 56: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/56.jpg)
56
Write to a socket by using write()
#include <unistd.h>ssize_t write(int sockfd, const void *buf,
size_t count);
- write up to count to the socket- return value: -1 if an error occurs;
otherwise number of bytes write- what are the possible outcomes of this
system call?
![Page 57: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/57.jpg)
57
Send to a Socket
#include <sys/types.h>#include <sys/socket.h>int send(int sd, const void *msg, size_t len, int
flags);int sendto(int sd, const void *msg, size_t len, int
flags, const struct sockaddr *to, socklen_t tolen);int sendmsg(int sd, const struct msghdr *msg, int
flags)
- return value: -1 if an error occurs; otherwise the number of bytes sent
![Page 58: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/58.jpg)
58
sendmsg(): scatter and collectstruct msghdr {
void *msg_name; // peer addresssocklen_t msg_namelen; // address length struct iovec *msg_iov; // io vectorsize_t msg_iovlen; // io vector lengthvoid *msg_control; socklen_t msg_controllen;int msg_flags;
};struct iovec {
void *iov_base;size_t iov_len;
};
![Page 59: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/59.jpg)
59
Receive from a Socket
#include <sys/types.h>#include <sys/socket.h>int recv(int sd, void *buf, size_t len, int flags);int recvfrom(int sd, void *buf, size_t len, int flags,
struct sockaddr *from, socklen_t fromlen);int recvmsg(int sd, struct msghdr *msg, int flags);
- return value: -1 if an error occurs; otherwise the number of bytes received
![Page 60: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/60.jpg)
60
Close a Socket
#include <unistd.h>int close(int sd);
- return value: -1 if an error occurs; otherwise 0
#include <sys/socket.h>int shutdown(int sd, int how);- how : if 0, no further receives; if 1, no further
sends; if 2, no further sends or receives
- return value: -1 if an error occurs; otherwise 0
![Page 61: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/61.jpg)
61
Support Routines: Address from and to
String Formats#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);return value: positive if successful
const char *inet_ntop(int af, const void *src, char *dst, size_t cnt);
return value: NULL is error
Note: inet_addr() deprecated!
![Page 62: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/62.jpg)
62
Support Routines: Network/Host Order
#include <netinet/in.h>
unsigned long int htonl(unsigned long int hostlong);unsigned short int htons(unsigned short int
hostshort);
unsigned long int ntohl(unsigned long int networklong);
unsigned short int ntohs(unsigned short int networkshort);
![Page 63: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/63.jpg)
63
DNS Service
#include <netdb.h>extern int h_errno;
struct hostent *gethostbyname(const char *name);
Struct hostent {char *h_name; // official namechar **h_aliases; // a list of aliasesint h_addrtype;int h_length;char **h_addr_list;
}#define h_addr h_addr_list[0]- return value: NULL if fails
![Page 64: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/64.jpg)
64
Summary: Socket Programming %man 2 <name> System calls (functions)
int socket(int domain, int type, int protocol); int bind(int sd, struct sockaddr *my_addr, socklen_t
addrlen); int listen(int sd, int backlog); int connect(int sd, const struct sockaddr *serv_addr,
socklen_t addrlen); int accept(int sd, struct sockaddr *peer_addr, socklen_t
addrlen);
read(int sockfd, void *buf, size_t count); write(int sockfd, const void *buf, size_t count)
![Page 65: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/65.jpg)
65
Asynchronous Network Programming
(C/C++)
![Page 66: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/66.jpg)
66
A Relay TCP Client: telnet-like Program
TCP client
TCP server
writen
readn
fgets
fputs
http://zoo.cs.yale.edu/classes/cs433/programming/examples-c-socket/tcpclient
![Page 67: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/67.jpg)
67
Method 1: Process and Thread process
fork() waitpid()
Thread: light weight process pthread_create() pthread_exit()
![Page 68: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/68.jpg)
68
pthread
Void main() { char recvline[MAXLINE + 1]; ss = new socketstream(sockfd);
pthread_t tid; if (pthread_create(&tid, NULL, copy_to, NULL)) { err_quit("pthread_creat()"); }
while (ss->read_line(recvline, MAXLINE) > 0) { fprintf(stdout, "%s\n", recvline); }}
void *copy_to(void *arg) { char sendline[MAXLINE];
if (debug) cout << "Thread create()!" << endl; while (fgets(sendline, sizeof(sendline), stdin)) ss->writen_socket(sendline, strlen(sendline));
shutdown(sockfd, SHUT_WR); if (debug) cout << "Thread done!" << endl;
pthread_exit(0);}
![Page 69: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/69.jpg)
69
Method 2: Asynchronous I/O (Select)
select: deal with blocking system callint select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
FD_CLR(int fd, fd_set *set);FD_ZERO(fd_set *set);FD_ISSET(int fd, fd_set *set);FD_SET(int fd, fd_set *set);
![Page 70: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/70.jpg)
70
Method 3: Signal and Select
signal: events such as timeout
![Page 71: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/71.jpg)
71
Examples of Network Programming
Library to make life easier Four design examples
TCP Client TCP server using select TCP server using process and thread Reliable UDP
Warning: It will be hard to listen to me reading through the code. Read the code.
![Page 72: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/72.jpg)
72
Example 2: A Concurrent TCP Server Using Process or Thread
Get a line, and echo it back Use select() For how to use process or thread, see
later Check the code at:
http://zoo.cs.yale.edu/classes/cs433/programming/examples-c-socket/tcpserver
Are there potential denial of service problems with the code?
![Page 73: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/73.jpg)
73
Example 3: A Concurrent HTTP TCP Server Using Process/Thread
Use process-per-request or thread-per- request
Check the code at:http://zoo.cs.yale.edu/classes/cs433/programming/examples-c-socket/simple_httpd
![Page 74: 1 Socket Network Programming 02/11/2008. Admin. r Programming assignment 1 update 2](https://reader030.vdocument.in/reader030/viewer/2022032607/56649eba5503460f94bc255a/html5/thumbnails/74.jpg)
74
Example 4: Reliable UDP
How to implement timeout? Use SIGALARM Use setjmp() Check the code at:http://zoo.cs.yale.edu/classes/cs433/programming/examples-c-socket/udptimeout