Sockets Final
1 of 24
Sockets Final
Featured
Displaying and Describing Categorical Data
Difficult Long Division Problems
westward expansion
Criteria for Testing Polymorphic Relationships
Valuation
Penny
Modeling Infrared Lans In Glomosim
tornados
Physical Evidence
building customer relationship 1
Independent Classics
Information Systems in Organizations
Malyzer, Defeating Anti-detection For Application-level Malware Analysis
Approaches to Use Multiple Channels
SLide
coastal erosion
Computing Geodesic Spectra Of Surfaces
An Introduction to the Inquiry Process in archaeology
Enhancing Role Efficacy An OD Intervention
Software Engineering - Structured Design 2
Sockets Final - Transcript
CS 640 Computer Networking
Ashutosh Shukla Lecture 3 Network Programming
Topics
Client server model Sockets interface Socket primitives Example code for echoclient and echoserver Debugging With GDB Programming Assignment 1 MNS
Client asks request server provides response Typically single server multiple clients The server does not need to know anything about the client even that it exists The client should always know something about the server at least where it is located
1 Client sends request Client process 4 Client handles response 3 Server sends response Server process 2 Server handles request Resource
Client sever model
Note clients and servers are processes running on hosts can be the same or different hosts
Sockets as means for inter process communication IPC
application layer
application layer
Client Process Socket
transportnetwork OS layer TCP UDP network layer IP link layer e g ethernet physical layer
Internet
Server Process Socket
transport layer TCP UDP link layer e g ethernet physical layer
stack
Internet Internet
OS network network layer IP stack
The interface that the OS provides to its networking subsystem
Internet Connections TCP IP
Address the machine on the network Address the process
By IP address By the port number
The pair of IP address port makes up a socket address
Client socket address 128 2 194 242 3479 Server socket address 208 216 181 15 80
Client
Connection socket pair 128 2 194 242 3479 208 216 181 15 80
Server port 80 Server host address 208 216 181 15
Client host address 128 2 194 242 Note 3479 is an ephemeral port allocated by the kernel
Note 80 is a well known port associated with Web servers
Examples of client programs
Clients
How does a client find the server
Web browsers ftp telnet ssh The IP address in the server socket address identifies the host The well known port in the server socket address identifies the service and thus implicitly identifies the server process that performs that service Examples of well known ports
Port 7 Echo server Port 23 Telnet server Port 25 Mail server Port 80 Web server
Using Ports to Identify Services
Server host 128 2 194 242 Client host Service request for 128 2 194 242 80 i e the Web server Web server port 80 Kernel Echo server port 7
Client
Client
Service request for 128 2 194 242 7 i e the echo server
Web server port 80 Kernel Echo server port 7
Servers are long running processes daemons
Servers
Each server waits for requests to arrive on a well known port associated with a particular service
Port 7 echo server Port 23 telnet server See etc services for a Port 25 mail server comprehensive list of the Port 80 HTTP server services available on a Linux machine Other applications should choose between 1024 and 65535
Created at boot time typically by the init process process 1 Run continuously until the machine is turned off
Sockets
What is a socket
To the kernel a socket is an endpoint of communication To an application a socket is a file descriptor that lets the application read write from to the network
Remember All Unix I O devices including networks are modeled as files
Clients and servers communicate with each by reading from and writing to socket descriptors The main distinction between regular file I O and socket I O is how the application opens the socket descriptors
Network Byte Ordering
Socket Programming Cliches
Network is big endian host may be big or little endian Functions work on 16 bit short and 32 bit long values htons htonl convert host byte order to network byte order ntohs ntohl convert network byte order to host byte order Use these to convert network addresses ports
struct sockaddr in serveraddr fill in serveraddr with an address Connect takes struct sockaddr as its second argument connect clientfd struct sockaddr serveraddr sizeof serveraddr
SOCKET int socket int domain int type int protocol
domain AF INET IPv4 protocol type SOCK DGRAM or SOCK STREAM protocol 0 IPPROTO UDP or IPPROTO TCP returned socket descriptor sockfd 1 is an error
Socket primitives
BIND int bind int sockfd struct sockaddr my addr int addrlen
sockfd socket descriptor returned from socket my addr socket address struct sockaddr in is used addrlen sizeof struct sockaddr
struct sockaddr in unsigned short sin family unsigned short sin port struct in addr sin addr unsigned char sin zero 8
address family always AF INET port num in network byte order IP addr in network byte order pad to sizeof struct sockaddr
LISTEN int listen int sockfd int backlog ACCEPT int accept int sockfd void addr int addrlen CONNECT int connect int sockfd struct sockaddr serv addr int addrlen used by TCP client SEND int send int sockfd const void msg int len int flags
msg message you want to send len length of the message flags 0 returned the number of bytes actually sent parameters are same as for bind addr here the socket address of the caller will be written returned a new socket descriptor for the temporal socket backlog how many connections we want to queue
RECEIVE int recv int sockfd void buf int len unsigned int flags
buf buffer to receive the message len length of the buffer don t give me more flags 0 returned the number of bytes received
SEND DGRAM style int sendto int sockfd const void msg int len int flags const struct sockaddr to int tolen
msg message you want to send len length of the message flags 0 to socket address of the remote process tolen sizeof struct sockaddr returned the number of bytes actually sent
RECEIVE DGRAM style int recvfrom int sockfd void buf int len unsigned int flags struct sockaddr from int fromlen
buf buffer to receive the message len length of the buffer don t give me more from socket address of the process that sent the data fromlen sizeof struct sockaddr flags 0 returned the number of bytes received
CLOSE close socketfd
Client server connectionless
CREATE BIND
SEND RECEIVE SEND CLOSE
Client server connection oriented
BIND SOCKET CONNECT TCP three way handshake ACCEPT LISTEN
SEND
RECEIVE
SEND RECEIVE CLOSE
Concurrent server
EchoClient c include s
include stdio h for printf and fprintf include sys socket h for socket connect sendto and recvfrom include arpa inet h for sockaddr in and inet addr include stdlib h for atoi and exit include string h for memset include unistd h for close define ECHOMAX 255 Longest string to echo
EchoClient c variable declarations
int main int argc char argv int sock Socket descriptor struct sockaddr in echoServAddr Echo server address struct sockaddr in fromAddr Source address of echo unsigned short echoServPort 7 Echo server port unsigned int fromSize address size for recvfrom char servIP 172 24 23 4 IP address of server char echoString I hope this works String to send to echo server char echoBuffer ECHOMAX 1 Buffer for receiving echoed string int echoStringLen Length of string to echo int respStringLen Length of received response
EchoClient c creating the socket and sending
Create a datagram UDP socket sock socket AF INET SOCK DGRAM 0 Construct the server address structure memset echoServAddr 0 sizeof echoServAddr Zero out structure echoServAddr sin family AF INET Internet addr family echoServAddr sin addr s addr htonl servIP Server IP address echoServAddr sin port htons echoServPort Server port Send the string to the server sendto sock echoString echoStringLen 0 struct sockaddr echoServAddr sizeof echoServAddr Recv a response
EchoClient c receiving and printing
fromSize sizeof fromAddr recvfrom sock echoBuffer ECHOMAX 0 struct sockaddr fromAddr fromSize Error checks like packet is received from the same server null terminate the received data echoBuffer echoStringLen 0 printf Received s n echoBuffer Print the echoed arg close sock exit 0 end of main
EchoServer c
int main int argc char argv int sock Socket struct sockaddr in echoServAddr Local address struct sockaddr in echoClntAddr Client address unsigned int cliAddrLen Length of incoming message char echoBuffer ECHOMAX Buffer for echo string unsigned short echoServPort 7 Server port int recvMsgSize Size of received message Create socket for sending receiving datagrams sock socket AF INET SOCK DGRAM 0 Construct local address structure memset echoServAddr 0 sizeof echoServAddr Zero out structure echoServAddr sin family AF INET Internet address family echoServAddr sin addr s addr htonl 172 24 23 4 echoServAddr sin port htons echoServPort Local port Bind to the local address bind sock struct sockaddr echoServAddr sizeof echoServAddr
for Run forever cliAddrLen sizeof echoClntAddr Block until receive message from a client recvMsgSize recvfrom sock echoBuffer ECHOMAX 0 struct sockaddr echoClntAddr cliAddrLen printf Handling client s n inet ntoa echoClntAddr sin addr Send received datagram back to the client sendto sock echoBuffer recvMsgSize 0 struct sockaddr echoClntAddr sizeof echoClntAddr end of main Error handling is must
man is your friend
man accept man sendto Etc
Socket Programming Help
The manual page will tell you
What include directives you need at the top of your source code The type of each argument The possible return values The possible errors in errno
Prepare program for debugging Two main ways to run gdb
On program directly
run args
Debugging with gdb
Compile with g keep full symbol table Don t use compiler optimization O O2
gdb progname Once gdb is executing we can execute the program with
On a core post mortem
Extensive in program documentation exists
gdb progname core Useful for examining program state at the point of crash
help or help topic or help command
More information
Socket programming
W Richard Stevens UNIX Network Programming Infinite number of online resources http www cs rpi edu courses sysprog sockets sock html
GDB
Official GDB homepage http www gnu org software gdb gdb html GDB primer http www cs pitt edu mosse gdb note html












