SlideShare a Scribd company logo
Basics of sockets
Socket basics
 Socket basics
 Socket details (TCP and UDP)
 Socket options
Socket Basics (1 of 2)
 An end-point for an Internet network connection
 what the application layer “plugs into”
User Application
Socket
Operating System
Transport Layer
Internet Protocol Layer
 User sees “descriptor” - integer index or object handle
 like: FILE *, or file index from open()
 returned by socket() call (more later)
 programmer cares about Application Programming Interface (API)
Socket Basics (2 of 2)
 End point determined by two things:
 Host address: IP address is Network Layer
 Port number: is Transport Layer
 Two end-points determine a connection: socket pair
 ex: 206.62.226.35,p21 + 198.69.10.2,p1500
 ex: 206.62.226.35,p21 + 198.69.10.2,p1499
Ports
 Numbers (typical, since vary by OS):
 0-1023 “reserved”, must be root
 1024 - 5000 “ephemeral”
 Above 5000 for general use
 (50,000 is specified max)
 Well-known, reserved services (see /etc/services in
Unix):
 ftp 21/tcp
 telnet 23/tcp
 finger 79/tcp
 snmp 161/udp
Transport Layer
 UDP: User Datagram Protocol
 no acknowledgements
 no retransmissions
 out of order, duplicates possible
 connectionless
 TCP: Transmission Control Protocol
 reliable (in order, all arrive, no duplicates)
 flow control
 Connection-based
 While TCP ~95% of all flows and packets, much UDP
traffic is games!
Socket Details Outline
 Structure to hold address information
 Functions pass address from user to OS
bind()
connect()
sendto()
 Functions pass address from OS to user
accept()
recvfrom()
Process to Kernel
Kernel to Process
Socket Address Structure
struct in_addr {
in_addr_t s_addr; /* 32-bit IPv4
addresses */
};
struct sockaddr_in {
unit8_t sin_len; /* length of structure
*/
sa_family_t sin_family; /* AF_INET */
in_port_t sin_port; /* TCP/UDP Port
num */
struct in_addr sin_addr; /* IPv4 address
(above) */
char sin_zero[8]; /* unused */
}
 Are also “generic” and “IPv6” socket structures
Byte Ordering
Byte Ordering Functions
TCP Client-Server
socket()
bind()
listen()
accept()
Server
socket()
connect()
send()
recv()
Client
(Block until connection)
“Handshake”
recv()
send()
Data (request)
Data (reply)
close()End-of-File
recv()
close()
“well-known”
port
socket()
int socket(int family, int type, int protocol);
Create a socket, giving access to transport layer service.
 family is one of
 AF_INET (IPv4), AF_INET6 (IPv6), AF_LOCAL (local Unix),
 AF_ROUTE (access to routing tables), AF_KEY (new, for encryption)
 type is one of
 SOCK_STREAM (TCP), SOCK_DGRAM (UDP)
 SOCK_RAW (for special IP packets, PING, etc. Must be root)
 setuid bit (-rws--x--x root 1997 /sbin/ping*)
 protocol is 0 (used for some raw socket options)
 upon success returns socket descriptor
 Integer, like file descriptor
 Return -1 if failure
bind()
 sockfd is socket descriptor from socket()
 myaddr is a pointer to address struct with:
 port number and IP address
 if port is 0, then host will pick ephemeral port
 not usually for server (exception RPC port-map)
 IP address != INADDR_ANY (unless multiple nics)
 addrlen is length of structure
 returns 0 if ok, -1 on error
 EADDRINUSE (“Address already in use”)
int bind(int sockfd, const struct sockaddr *myaddr,
socklen_t addrlen);
Assign a local protocol address (“name”) to a socket.
listen()
 sockfd is socket descriptor from socket()
 backlog is maximum number of incomplete
connections
 historically 5
 rarely above 15 on a even moderate Web server!
 Sockets default to active (for a client)
 change to passive so OS will accept connection
int listen(int sockfd, int backlog);
Change socket state for TCP server.
accept()
 sockfd is socket descriptor from socket()
 cliaddr and addrlen return protocol address from
client
 returns brand new descriptor, created by OS
 note, if create new process or thread, can create
concurrent server
int accept(int sockfd, struct sockaddr cliaddr, socklen_t
*addrlen);
Return next completed connection.
close()
 sockfd is socket descriptor from socket()
 closes socket for reading/writing
 returns (doesn’t block)
 attempts to send any unsent data
 socket option SO_LINGER
 block until data sent
 or discard any remaining data
 returns -1 if error
int close(int sockfd);
Close socket for use.
TCP Client-Serversocket()
bind()
listen()
accept()
Server
socket()
connect()
send()
recv()
Client
(Block until connection)
“Handshake”
recv()
send()
Data (request)
Data (reply)
close()End-of-File
recv()
close()
“well-known”
port
connect()
 sockfd is socket descriptor from socket()
 servaddr is a pointer to a structure with:
 port number and IP address
 must be specified (unlike bind())
 addrlen is length of structure
 client doesn’t need bind()
 OS will pick ephemeral port
 returns socket descriptor if ok, -1 on error
int connect(int sockfd, const struct
sockaddr *servaddr, socklen_t addrlen);
Connect to server.
Sending and Receiving
int recv(int sockfd, void *buff, size_t
mbytes, int flags);
int send(int sockfd, void *buff, size_t
mbytes, int flags);
UDP Client-Server
socket()
bind()
recvfrom()
Server
socket()
sendto()
recvfrom()
Client
(Block until receive datagram)
sendto()
Data (request)
Data (reply)
close()
“well-known”
port
- No “handshake”
- No simultaneous close
- No fork()/spawn() for concurrent servers!
Sending and Receiving
int recvfrom(int sockfd, void *buff, size_t mbytes, int
flags, struct sockaddr *from, socklen_t *addrlen);
int sendto(int sockfd, void *buff, size_t mbytes, int
flags, const struct sockaddr *to, socklen_t addrlen);
 Same as recv() and send() but for addr
 recvfrom fills in address of where packet came
from
 sendto requires address of where sending packet
to
connect() with UDP
 Record address and port of peer
 datagrams to/from others are not allowed
 does not do three way handshake, or connection
 “connect” a misnomer, here. Should be setpeername()
 Use send() instead of sendto()
 Use recv() instead of recvfrom()
 Can change connect or unconnect by repeating connect()
call
 (Can do similar with bind() on receiver)
Why use connected UDP?
• Send two
datagrams
unconnected:
– connect the socket
– output first dgram
– unconnect the socket
– connect the socket
– ouput second dgram
– unconnect the socket
• Send two
datagrams
connected:
– connect the socket
– output first dgram
– ouput second dgram
Socket Options
 setsockopt(), getsockopt()
 SO_LINGER
 upon close, discard data or block until sent
 SO_RCVBUF, SO_SNDBUF
 change buffer sizes
 for TCP is “pipeline”, for UDP is “discard”
 SO_RCVLOWAT, SO_SNDLOWAT
 how much data before “readable” via select()
 SO_RCVTIMEO, SO_SNDTIMEO
 timeouts
fcntl()
 ‘File control’ but used for sockets, too
 Signal driven sockets
 Set socket owner
 Get socket owner
 Set socket non-blocking
flags = fcntl(sockfd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(sockfd, F_SETFL, flags);
 Beware not getting flags before setting!
Concurrent Servers
 Close sock in child, newsock in parent
 Reference count for socket descriptor
Text segment
sock = socket()
/* setup socket */
while (1) {
newsock = accept(sock)
fork()
if child
read(newsock)
until exit
}
Parent
int sock;
int newsock;
Child
int sock;
int newsock;

More Related Content

PPT
PPTX
Elementary TCP Sockets
PPT
Np unit2
PPT
Socket Programming Tutorial
PPT
Socket Programming
PPTX
Socket programming in c
PPTX
Socket Programming
PPT
Sockets in unix
Elementary TCP Sockets
Np unit2
Socket Programming Tutorial
Socket Programming
Socket programming in c
Socket Programming
Sockets in unix

What's hot (20)

PPT
Np unit iii
PDF
Programming TCP/IP with Sockets
PPT
Socket programming
PDF
PPT
Socket programming in C
PPTX
Socket programming
PPTX
IPC SOCKET
PPT
Sockets
PDF
Socket programming using C
PPT
Np unit iv ii
PDF
Sockets
PPT
Java Socket Programming
PDF
Socket programming using java
PPT
A Short Java Socket Tutorial
PPT
Np unit1
DOC
socket programming
PPT
Ports & sockets
PDF
Networking lab
PPT
Socket programming
DOCX
Lab manual cn-2012-13
Np unit iii
Programming TCP/IP with Sockets
Socket programming
Socket programming in C
Socket programming
IPC SOCKET
Sockets
Socket programming using C
Np unit iv ii
Sockets
Java Socket Programming
Socket programming using java
A Short Java Socket Tutorial
Np unit1
socket programming
Ports & sockets
Networking lab
Socket programming
Lab manual cn-2012-13
Ad

Viewers also liked (20)

PDF
Jnp
PPT
Networking Java Socket Programming
PPT
Network programming in Java
PPT
Java Basics
PPT
Networking Chapter 4
PPT
Networking Chapter 5
PDF
Profinet Design
PDF
Profinet system design - Andy Verwer
PDF
Profibus commissioning and maintenance - Richard Needham
PPT
Tcp sockets
PPT
Easy Steps to implement UDP Server and Client Sockets
PDF
W4 profinet frame analysis, peter thomas
PDF
Profibus and Profinet shield currents - Peter Thomas
PDF
Introduction to PROFINET - Derek Lane of Wago
PDF
Introduction to Profibus & Profinet - Mark Freeman
PPTX
Network programming in java - PPT
PPT
Wireshark - presentation
PPTX
Network Packet Analysis with Wireshark
PPT
Wireshark Basics
PPT
Ppt of socket
Jnp
Networking Java Socket Programming
Network programming in Java
Java Basics
Networking Chapter 4
Networking Chapter 5
Profinet Design
Profinet system design - Andy Verwer
Profibus commissioning and maintenance - Richard Needham
Tcp sockets
Easy Steps to implement UDP Server and Client Sockets
W4 profinet frame analysis, peter thomas
Profibus and Profinet shield currents - Peter Thomas
Introduction to PROFINET - Derek Lane of Wago
Introduction to Profibus & Profinet - Mark Freeman
Network programming in java - PPT
Wireshark - presentation
Network Packet Analysis with Wireshark
Wireshark Basics
Ppt of socket
Ad

Similar to Basics of sockets (20)

PPT
Sockets
PPT
Introduction to sockets tcp ip protocol.ppt
PPTX
L5-Sockets.pptx
PPT
Basic socket programming
PDF
Sockets
PDF
Network Sockets
PPTX
Lecture 1 Socket programming elementary tcp sockets.pptx
PPT
Sockets intro
PPT
Socket System Calls
PPT
TCP IP
PPT
Unit 8 Java
PDF
Socket Programming TCP:IP PPT.pdf
PPT
sockets_intro.ppt
DOC
socket programming
PPT
INTRODUCTION TO SOCKETS IN COMPUTER NETWORKS DEPT OF CSE.ppt
PPT
Application Layer and Socket Programming
PPTX
Socket programming
PDF
socketProgramming-TCP-and UDP-overview.pdf
PPT
CN_UNIT4.ppt notre knxckvj bjbDJKVHFL jb
Sockets
Introduction to sockets tcp ip protocol.ppt
L5-Sockets.pptx
Basic socket programming
Sockets
Network Sockets
Lecture 1 Socket programming elementary tcp sockets.pptx
Sockets intro
Socket System Calls
TCP IP
Unit 8 Java
Socket Programming TCP:IP PPT.pdf
sockets_intro.ppt
socket programming
INTRODUCTION TO SOCKETS IN COMPUTER NETWORKS DEPT OF CSE.ppt
Application Layer and Socket Programming
Socket programming
socketProgramming-TCP-and UDP-overview.pdf
CN_UNIT4.ppt notre knxckvj bjbDJKVHFL jb

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Chapter 3 Spatial Domain Image Processing.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Encapsulation theory and applications.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
KodekX | Application Modernization Development
PDF
cuic standard and advanced reporting.pdf
PDF
Electronic commerce courselecture one. Pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Empathic Computing: Creating Shared Understanding
PDF
Encapsulation_ Review paper, used for researhc scholars
PPT
Teaching material agriculture food technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Chapter 3 Spatial Domain Image Processing.pdf
The AUB Centre for AI in Media Proposal.docx
Encapsulation theory and applications.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
NewMind AI Monthly Chronicles - July 2025
KodekX | Application Modernization Development
cuic standard and advanced reporting.pdf
Electronic commerce courselecture one. Pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
Machine learning based COVID-19 study performance prediction
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Dropbox Q2 2025 Financial Results & Investor Presentation
Understanding_Digital_Forensics_Presentation.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Empathic Computing: Creating Shared Understanding
Encapsulation_ Review paper, used for researhc scholars
Teaching material agriculture food technology

Basics of sockets

  • 2. Socket basics  Socket basics  Socket details (TCP and UDP)  Socket options
  • 3. Socket Basics (1 of 2)  An end-point for an Internet network connection  what the application layer “plugs into” User Application Socket Operating System Transport Layer Internet Protocol Layer  User sees “descriptor” - integer index or object handle  like: FILE *, or file index from open()  returned by socket() call (more later)  programmer cares about Application Programming Interface (API)
  • 4. Socket Basics (2 of 2)  End point determined by two things:  Host address: IP address is Network Layer  Port number: is Transport Layer  Two end-points determine a connection: socket pair  ex: 206.62.226.35,p21 + 198.69.10.2,p1500  ex: 206.62.226.35,p21 + 198.69.10.2,p1499
  • 5. Ports  Numbers (typical, since vary by OS):  0-1023 “reserved”, must be root  1024 - 5000 “ephemeral”  Above 5000 for general use  (50,000 is specified max)  Well-known, reserved services (see /etc/services in Unix):  ftp 21/tcp  telnet 23/tcp  finger 79/tcp  snmp 161/udp
  • 6. Transport Layer  UDP: User Datagram Protocol  no acknowledgements  no retransmissions  out of order, duplicates possible  connectionless  TCP: Transmission Control Protocol  reliable (in order, all arrive, no duplicates)  flow control  Connection-based  While TCP ~95% of all flows and packets, much UDP traffic is games!
  • 7. Socket Details Outline  Structure to hold address information  Functions pass address from user to OS bind() connect() sendto()  Functions pass address from OS to user accept() recvfrom()
  • 10. Socket Address Structure struct in_addr { in_addr_t s_addr; /* 32-bit IPv4 addresses */ }; struct sockaddr_in { unit8_t sin_len; /* length of structure */ sa_family_t sin_family; /* AF_INET */ in_port_t sin_port; /* TCP/UDP Port num */ struct in_addr sin_addr; /* IPv4 address (above) */ char sin_zero[8]; /* unused */ }  Are also “generic” and “IPv6” socket structures
  • 13. TCP Client-Server socket() bind() listen() accept() Server socket() connect() send() recv() Client (Block until connection) “Handshake” recv() send() Data (request) Data (reply) close()End-of-File recv() close() “well-known” port
  • 14. socket() int socket(int family, int type, int protocol); Create a socket, giving access to transport layer service.  family is one of  AF_INET (IPv4), AF_INET6 (IPv6), AF_LOCAL (local Unix),  AF_ROUTE (access to routing tables), AF_KEY (new, for encryption)  type is one of  SOCK_STREAM (TCP), SOCK_DGRAM (UDP)  SOCK_RAW (for special IP packets, PING, etc. Must be root)  setuid bit (-rws--x--x root 1997 /sbin/ping*)  protocol is 0 (used for some raw socket options)  upon success returns socket descriptor  Integer, like file descriptor  Return -1 if failure
  • 15. bind()  sockfd is socket descriptor from socket()  myaddr is a pointer to address struct with:  port number and IP address  if port is 0, then host will pick ephemeral port  not usually for server (exception RPC port-map)  IP address != INADDR_ANY (unless multiple nics)  addrlen is length of structure  returns 0 if ok, -1 on error  EADDRINUSE (“Address already in use”) int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); Assign a local protocol address (“name”) to a socket.
  • 16. listen()  sockfd is socket descriptor from socket()  backlog is maximum number of incomplete connections  historically 5  rarely above 15 on a even moderate Web server!  Sockets default to active (for a client)  change to passive so OS will accept connection int listen(int sockfd, int backlog); Change socket state for TCP server.
  • 17. accept()  sockfd is socket descriptor from socket()  cliaddr and addrlen return protocol address from client  returns brand new descriptor, created by OS  note, if create new process or thread, can create concurrent server int accept(int sockfd, struct sockaddr cliaddr, socklen_t *addrlen); Return next completed connection.
  • 18. close()  sockfd is socket descriptor from socket()  closes socket for reading/writing  returns (doesn’t block)  attempts to send any unsent data  socket option SO_LINGER  block until data sent  or discard any remaining data  returns -1 if error int close(int sockfd); Close socket for use.
  • 19. TCP Client-Serversocket() bind() listen() accept() Server socket() connect() send() recv() Client (Block until connection) “Handshake” recv() send() Data (request) Data (reply) close()End-of-File recv() close() “well-known” port
  • 20. connect()  sockfd is socket descriptor from socket()  servaddr is a pointer to a structure with:  port number and IP address  must be specified (unlike bind())  addrlen is length of structure  client doesn’t need bind()  OS will pick ephemeral port  returns socket descriptor if ok, -1 on error int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); Connect to server.
  • 21. Sending and Receiving int recv(int sockfd, void *buff, size_t mbytes, int flags); int send(int sockfd, void *buff, size_t mbytes, int flags);
  • 22. UDP Client-Server socket() bind() recvfrom() Server socket() sendto() recvfrom() Client (Block until receive datagram) sendto() Data (request) Data (reply) close() “well-known” port - No “handshake” - No simultaneous close - No fork()/spawn() for concurrent servers!
  • 23. Sending and Receiving int recvfrom(int sockfd, void *buff, size_t mbytes, int flags, struct sockaddr *from, socklen_t *addrlen); int sendto(int sockfd, void *buff, size_t mbytes, int flags, const struct sockaddr *to, socklen_t addrlen);  Same as recv() and send() but for addr  recvfrom fills in address of where packet came from  sendto requires address of where sending packet to
  • 24. connect() with UDP  Record address and port of peer  datagrams to/from others are not allowed  does not do three way handshake, or connection  “connect” a misnomer, here. Should be setpeername()  Use send() instead of sendto()  Use recv() instead of recvfrom()  Can change connect or unconnect by repeating connect() call  (Can do similar with bind() on receiver)
  • 25. Why use connected UDP? • Send two datagrams unconnected: – connect the socket – output first dgram – unconnect the socket – connect the socket – ouput second dgram – unconnect the socket • Send two datagrams connected: – connect the socket – output first dgram – ouput second dgram
  • 26. Socket Options  setsockopt(), getsockopt()  SO_LINGER  upon close, discard data or block until sent  SO_RCVBUF, SO_SNDBUF  change buffer sizes  for TCP is “pipeline”, for UDP is “discard”  SO_RCVLOWAT, SO_SNDLOWAT  how much data before “readable” via select()  SO_RCVTIMEO, SO_SNDTIMEO  timeouts
  • 27. fcntl()  ‘File control’ but used for sockets, too  Signal driven sockets  Set socket owner  Get socket owner  Set socket non-blocking flags = fcntl(sockfd, F_GETFL, 0); flags |= O_NONBLOCK; fcntl(sockfd, F_SETFL, flags);  Beware not getting flags before setting!
  • 28. Concurrent Servers  Close sock in child, newsock in parent  Reference count for socket descriptor Text segment sock = socket() /* setup socket */ while (1) { newsock = accept(sock) fork() if child read(newsock) until exit } Parent int sock; int newsock; Child int sock; int newsock;