SlideShare a Scribd company logo
Introduction to Sockets
Ashish Gupta
TA , Intro to Networking
Jan 2004
Why do we need sockets?
Provides an abstraction for
interprocess communication
• The services provided (often by the operating
system) that provide the interface between
application and protocol software.
ApplicationApplication
Network APINetwork API
Protocol AProtocol A Protocol BProtocol B Protocol CProtocol C
Definition
Functions
–Define an “end- point” for
communication
–Initiate and accept a connection
–Send and receive data
–Terminate a connection gracefully
Examples
File transfer apps (FTP), Web browsers
(HTTP), Email (SMTP/ POP3), etc…
Types of Sockets
• Two different types of sockets :
– stream vs. datagram
• Stream socket :( a. k. a. connection- oriented socket)
– It provides reliable, connected networking service
– Error free; no out- of- order packets (uses TCP)
– applications: telnet/ ssh, http, …
• Datagram socket :( a. k. a. connectionless socket)
– It provides unreliable, best- effort networking service
– Packets may be lost; may arrive out of order (uses UDP)
– applications: streaming audio/ video (realplayer), …
Addressing
Client Server
Addresses, Ports and Sockets
• Like apartments and mailboxes
– You are the application
– Your apartment building address is the address
– Your mailbox is the port
– The post-office is the network
– The socket is the key that gives you access to the
right mailbox
Client – high level view
Create a socket
Setup the server address
Connect to the server
Read/write data
Shutdown connection
int connect_ socket( char *hostname, int port) {
int sock;
struct sockaddr_in sin;
struct hostent *host;
sock = socket( AF_ INET, SOCK_ STREAM, 0);
if (sock == -1)
return sock;
host = gethostbyname( hostname);
if (host == NULL) {
close( sock);
return -1;
}
memset (& sin, 0, sizeof( sin));
sin. sin_ family = AF_ INET;
sin. sin_ port = htons( port);
sin. sin_ addr. s_ addr = *( unsigned long *) host-> h_ addr_ list[
0];
if (connect( sock, (struct sockaddr *) &sin, sizeof( sin)) != 0) {
close (sock);
return -1;
}
return sock;
}
Resolve the host
struct hostent *gethostbyname( const char *hostname);
/*Return nonnull pointer if OK, NULL on error */
Setup up the struct
unit16_t htons(unit16_t host16bitvaule)
/*Change the port number from host byte order to
network byte order */
Connect
connect(int socketfd, const struct sockaddr * servaddr,
socket_t addrlen)
/*Perform the TCP three way handshaking*/
Hostent structure
struct hostent{
char * h_name /*official name of host*/
char ** h_aliases; /* pointer ot array of
pointers to alias name*/
int h_addrtype /* host address type*/
int h_length /* length of address */
char ** h_addr_list /*prt to array of ptrs with 
IPv4 or IPv6 address*/
}
Ipv4 socket address structure
struct socketaddr_in{
uint8_t sin_len; /*length of the structure (16)*/
sa_falimily_t sin_family /* AF_INT*/
in_port_t sin_port /* 16 bit TCP or UDP port number*/
struct in_addr sin_addr /* 32 bit Ipv4 address */
char sin_zero(8)/* unused*/
}
 
Make the socket
Socket(int family , int type, in t protocol);
return nonnegative value for OK, -1 for error
Server – high level view
Create a socket
Bind the socket
Listen for connections
Accept new client connections
Read/write to client connections
Shutdown connection
Listening on a port (TCP)
int make_ listen_ socket( int port) {
struct sockaddr_ in sin;
int sock;
sock = socket( AF_ INET, SOCK_ STREAM, 0);
if (sock < 0)
return -1;
memset(& sin, 0, sizeof( sin));
sin. sin_ family = AF_ INET;
sin. sin_ addr. s_ addr = htonl( INADDR_ ANY);
sin. sin_ port = htons( port);
if (bind( sock, (struct sockaddr *) &sin, sizeof( sin)) <
0)
return -1;
return sock;
}
Make the socket
Setup up the struct
Bind
bind(int sockfd, const struct sockaddr * myaddr, socklen_t addrlen);
/* return 0 if OK, -1 on error
assigns a local protocol adress to a socket*/
accepting a client connection (TCP)
int get_ client_ socket( int listen_ socket) {
struct sockaddr_ in sin;
int sock;
int sin_ len;
memset(& sin, 0, sizeof( sin));
sin_ len = sizeof( sin);
sock = accept( listen_ socket, (struct sockaddr *)
&sin, &sin_ len);
return sock;
}
Setup up the struct
Accept the client connection
accept(int sockefd, struct sockaddr * claddr, socklen_t * addrlen)
/* return nonnegative descriptor if OK, -1 on error
return the next completed connection from the front of the
completed connection queue.
if the queue is empty,
the process is put to sleep(assuming blocking socket)*/
Sending / Receiving Data
• With a connection (SOCK_STREAM):
– int count = send(sock, &buf, len, flags);
• count: # bytes transmitted (-1 if error)
• buf: char[], buffer to be transmitted
• len: integer, length of buffer (in bytes) to transmit
• flags: integer, special options, usually just 0
– int count = recv(sock, &buf, len, flags);
• count: # bytes received (-1 if error)
• buf: void[], stores received bytes
• len: # bytes received
• flags: integer, special options, usually just 0
– Calls are blocking [returns only after data is sent (to
socket buf) / received]
socket()
bind()
listen()
accept()
read()
write()
read()
close()
Socket()
connect()
write()
read()
close()
TCP Client
TCP Server
Well-known port
blocks until connection from client
process request
Connection establishment
Data(request)
Data(reply)
End-of-file notification
Dealing with blocking calls
• Many functions block
– accept(), connect(),
– All recv()
• For simple programs this is fine
• What about complex connection routines
– Multiple connections
– Simultaneous sends and receives
– Simultaneously doing non-networking processing
Dealing with blocking (cont..)
• Options
– Create multi-process or multi-threaded code
– Turn off blocking feature (fcntl() system call)
– Use the select() function
• What does select() do?
– Can be permanent blocking, time-limited blocking or non-
blocking
– Input: a set of file descriptors
– Output: info on the file-descriptors’ status
– Therefore, can identify sockets that are “ready for use”:
calls involving that socket will return immediately
select function call
• int status = select()
– Status: # of ready objects, -1 if error
– nfds: 1 +largest file descriptor to check
– readfds: list of descriptors to check if read-ready
– writefds: list of descriptors to check if write-ready
– exceptfds: list of descriptors to check if an
exception is registered
– Timeout: time after which select returns

More Related Content

PPT
Socket System Calls
PPTX
Socket programming
PDF
Advanced Sockets Programming
PDF
Network programming Using Python
PDF
Programming TCP/IP with Sockets
PPTX
Socket programming
PPTX
Network programming using python
PDF
Lecture10
Socket System Calls
Socket programming
Advanced Sockets Programming
Network programming Using Python
Programming TCP/IP with Sockets
Socket programming
Network programming using python
Lecture10

What's hot (20)

PPTX
Socket programming in c
PPTX
Socket programming
PPT
Socket programming in C
PPT
Tcp sockets
PDF
Socket programming using C
PPT
Application Layer and Socket Programming
PDF
Network Sockets
PDF
PPT
Ppt of socket
PPTX
Elementary TCP Sockets
PDF
Socket programming
PPT
Socket programming
PPTX
Socket Programming
DOCX
Udp socket programming(Florian)
PDF
Socket Programming
PPT
Basic socket programming
PDF
Sockets
DOC
socket programming
PPT
Socket Programming it-slideshares.blogspot.com
Socket programming in c
Socket programming
Socket programming in C
Tcp sockets
Socket programming using C
Application Layer and Socket Programming
Network Sockets
Ppt of socket
Elementary TCP Sockets
Socket programming
Socket programming
Socket Programming
Udp socket programming(Florian)
Socket Programming
Basic socket programming
Sockets
socket programming
Socket Programming it-slideshares.blogspot.com
Ad

Viewers also liked (7)

DOCX
IndyScribe Mini Marathon Essay
DOC
M A R R I A G E & M U T U A L B L O S S O M I N G D R
PPTX
Open source: an introduction to IP and Legal
PPTX
His1 intermedio tardío
PPTX
Proyecto tecnologico
PPTX
Procedure text
PPTX
Business plan presentation Mom’s Biryani -The desi restaurant in Hyderabad, p...
IndyScribe Mini Marathon Essay
M A R R I A G E & M U T U A L B L O S S O M I N G D R
Open source: an introduction to IP and Legal
His1 intermedio tardío
Proyecto tecnologico
Procedure text
Business plan presentation Mom’s Biryani -The desi restaurant in Hyderabad, p...
Ad

Similar to Sockets intro (20)

PPT
sockets_intro.ppt
PPT
INTRODUCTION TO SOCKETS IN COMPUTER NETWORKS DEPT OF CSE.ppt
PPT
Sockets
PPTX
L5-Sockets.pptx
PPTX
Basics of sockets
PPT
Sockets in unix
PDF
PPT
Introduction to sockets tcp ip protocol.ppt
PDF
socketProgramming-TCP-and UDP-overview.pdf
PPT
Socket Programming
PPT
Multiplayer Game Programming Berkeley Socket API Chapter 3.ppt
PPTX
Lecture 1 Socket programming elementary tcp sockets.pptx
PPT
Socket programming-tutorial-sk
PPT
03-socketprogramming for college students.ppt
PPT
03-socketprogrsamming forcoleeger students.ppt
PPTX
Raspberry pi Part 23
PDF
Sockets
PPTX
Socket Programming Intro.pptx
PDF
lab04.pdf
sockets_intro.ppt
INTRODUCTION TO SOCKETS IN COMPUTER NETWORKS DEPT OF CSE.ppt
Sockets
L5-Sockets.pptx
Basics of sockets
Sockets in unix
Introduction to sockets tcp ip protocol.ppt
socketProgramming-TCP-and UDP-overview.pdf
Socket Programming
Multiplayer Game Programming Berkeley Socket API Chapter 3.ppt
Lecture 1 Socket programming elementary tcp sockets.pptx
Socket programming-tutorial-sk
03-socketprogramming for college students.ppt
03-socketprogrsamming forcoleeger students.ppt
Raspberry pi Part 23
Sockets
Socket Programming Intro.pptx
lab04.pdf

Recently uploaded (20)

PPTX
Cloud computing and distributed systems.
PDF
Modernizing your data center with Dell and AMD
PDF
Approach and Philosophy of On baking technology
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Empathic Computing: Creating Shared Understanding
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
KodekX | Application Modernization Development
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
cuic standard and advanced reporting.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Encapsulation theory and applications.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Cloud computing and distributed systems.
Modernizing your data center with Dell and AMD
Approach and Philosophy of On baking technology
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Empathic Computing: Creating Shared Understanding
MYSQL Presentation for SQL database connectivity
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
KodekX | Application Modernization Development
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
cuic standard and advanced reporting.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Encapsulation theory and applications.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Chapter 3 Spatial Domain Image Processing.pdf
The AUB Centre for AI in Media Proposal.docx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025

Sockets intro

  • 1. Introduction to Sockets Ashish Gupta TA , Intro to Networking Jan 2004
  • 2. Why do we need sockets? Provides an abstraction for interprocess communication
  • 3. • The services provided (often by the operating system) that provide the interface between application and protocol software. ApplicationApplication Network APINetwork API Protocol AProtocol A Protocol BProtocol B Protocol CProtocol C Definition
  • 4. Functions –Define an “end- point” for communication –Initiate and accept a connection –Send and receive data –Terminate a connection gracefully Examples File transfer apps (FTP), Web browsers (HTTP), Email (SMTP/ POP3), etc…
  • 5. Types of Sockets • Two different types of sockets : – stream vs. datagram • Stream socket :( a. k. a. connection- oriented socket) – It provides reliable, connected networking service – Error free; no out- of- order packets (uses TCP) – applications: telnet/ ssh, http, … • Datagram socket :( a. k. a. connectionless socket) – It provides unreliable, best- effort networking service – Packets may be lost; may arrive out of order (uses UDP) – applications: streaming audio/ video (realplayer), …
  • 7. Addresses, Ports and Sockets • Like apartments and mailboxes – You are the application – Your apartment building address is the address – Your mailbox is the port – The post-office is the network – The socket is the key that gives you access to the right mailbox
  • 8. Client – high level view Create a socket Setup the server address Connect to the server Read/write data Shutdown connection
  • 9. int connect_ socket( char *hostname, int port) { int sock; struct sockaddr_in sin; struct hostent *host; sock = socket( AF_ INET, SOCK_ STREAM, 0); if (sock == -1) return sock; host = gethostbyname( hostname); if (host == NULL) { close( sock); return -1; } memset (& sin, 0, sizeof( sin)); sin. sin_ family = AF_ INET; sin. sin_ port = htons( port); sin. sin_ addr. s_ addr = *( unsigned long *) host-> h_ addr_ list[ 0]; if (connect( sock, (struct sockaddr *) &sin, sizeof( sin)) != 0) { close (sock); return -1; } return sock; } Resolve the host struct hostent *gethostbyname( const char *hostname); /*Return nonnull pointer if OK, NULL on error */ Setup up the struct unit16_t htons(unit16_t host16bitvaule) /*Change the port number from host byte order to network byte order */ Connect connect(int socketfd, const struct sockaddr * servaddr, socket_t addrlen) /*Perform the TCP three way handshaking*/ Hostent structure struct hostent{ char * h_name /*official name of host*/ char ** h_aliases; /* pointer ot array of pointers to alias name*/ int h_addrtype /* host address type*/ int h_length /* length of address */ char ** h_addr_list /*prt to array of ptrs with IPv4 or IPv6 address*/ } Ipv4 socket address structure struct socketaddr_in{ uint8_t sin_len; /*length of the structure (16)*/ sa_falimily_t sin_family /* AF_INT*/ in_port_t sin_port /* 16 bit TCP or UDP port number*/ struct in_addr sin_addr /* 32 bit Ipv4 address */ char sin_zero(8)/* unused*/ }   Make the socket Socket(int family , int type, in t protocol); return nonnegative value for OK, -1 for error
  • 10. Server – high level view Create a socket Bind the socket Listen for connections Accept new client connections Read/write to client connections Shutdown connection
  • 11. Listening on a port (TCP) int make_ listen_ socket( int port) { struct sockaddr_ in sin; int sock; sock = socket( AF_ INET, SOCK_ STREAM, 0); if (sock < 0) return -1; memset(& sin, 0, sizeof( sin)); sin. sin_ family = AF_ INET; sin. sin_ addr. s_ addr = htonl( INADDR_ ANY); sin. sin_ port = htons( port); if (bind( sock, (struct sockaddr *) &sin, sizeof( sin)) < 0) return -1; return sock; } Make the socket Setup up the struct Bind bind(int sockfd, const struct sockaddr * myaddr, socklen_t addrlen); /* return 0 if OK, -1 on error assigns a local protocol adress to a socket*/
  • 12. accepting a client connection (TCP) int get_ client_ socket( int listen_ socket) { struct sockaddr_ in sin; int sock; int sin_ len; memset(& sin, 0, sizeof( sin)); sin_ len = sizeof( sin); sock = accept( listen_ socket, (struct sockaddr *) &sin, &sin_ len); return sock; } Setup up the struct Accept the client connection accept(int sockefd, struct sockaddr * claddr, socklen_t * addrlen) /* return nonnegative descriptor if OK, -1 on error return the next completed connection from the front of the completed connection queue. if the queue is empty, the process is put to sleep(assuming blocking socket)*/
  • 13. Sending / Receiving Data • With a connection (SOCK_STREAM): – int count = send(sock, &buf, len, flags); • count: # bytes transmitted (-1 if error) • buf: char[], buffer to be transmitted • len: integer, length of buffer (in bytes) to transmit • flags: integer, special options, usually just 0 – int count = recv(sock, &buf, len, flags); • count: # bytes received (-1 if error) • buf: void[], stores received bytes • len: # bytes received • flags: integer, special options, usually just 0 – Calls are blocking [returns only after data is sent (to socket buf) / received]
  • 14. socket() bind() listen() accept() read() write() read() close() Socket() connect() write() read() close() TCP Client TCP Server Well-known port blocks until connection from client process request Connection establishment Data(request) Data(reply) End-of-file notification
  • 15. Dealing with blocking calls • Many functions block – accept(), connect(), – All recv() • For simple programs this is fine • What about complex connection routines – Multiple connections – Simultaneous sends and receives – Simultaneously doing non-networking processing
  • 16. Dealing with blocking (cont..) • Options – Create multi-process or multi-threaded code – Turn off blocking feature (fcntl() system call) – Use the select() function • What does select() do? – Can be permanent blocking, time-limited blocking or non- blocking – Input: a set of file descriptors – Output: info on the file-descriptors’ status – Therefore, can identify sockets that are “ready for use”: calls involving that socket will return immediately
  • 17. select function call • int status = select() – Status: # of ready objects, -1 if error – nfds: 1 +largest file descriptor to check – readfds: list of descriptors to check if read-ready – writefds: list of descriptors to check if write-ready – exceptfds: list of descriptors to check if an exception is registered – Timeout: time after which select returns