SlideShare a Scribd company logo
Byte Ordering
●
Two types of “ Byte ordering”
– Network Byte Order: High-order byte of the number is
stored in memory at the lowest address
– Host Byte Order: Low-order byte of the number is
stored in memory at the lowest address
– Network stack (TCP/IP) expects Network Byte Order
●
Conversions:
– htons() - Host to Network Short
– htonl() - Host to Network Long
– ntohs() - Network to Host Short
– ntohl() - Network to Host Long
What is a socket?
●
Socket: An interface between an application
process and transport layer
– The application process can send/receive messages
to/from another application process (local or
remote)via a socket
●
In Unix jargon, a socket is a file descriptor – an
integer associated with an open file
●
Types of Sockets: Internet Sockets, unix sockets,
X.25 sockets etc
– Internet sockets characterized by IP Address (4 bytes),
port number (2 bytes)
Socket Description
Encapsulation
Types of Internet Sockets
●
Stream Sockets (SOCK_STREAM)
– Connection oriented
– Rely on TCP to provide reliable two-way connected
communication
●
Datagram Sockets (SOCK_DGRAM)
– Rely on UDP
– Connection is unreliable
socket() -- Get the file descriptor
●
int socket(int domain, int type, int protocol);
– domain should be set to PF_INET
– type can be SOCK_STREAM or SOCK_DGRAM
– set protocol to 0 to have socket choose the correct
protocol based on type
– socket() returns a socket descriptor for use in later
system calls or -1 on error
int sockfd;
sockfd = socket (PF_INET, SOCK_STREAM, 0);
Socket Structures
●
struct sockaddr: Holds socket address information
for many types of sockets
●
struct sockaddr_in: A parallel structure that makes
it easy to reference elements of the socket address
●
sin_port and sin_addr must be in Network Byte
Order
struct sockaddr {
unsigned short sa_family; //address family AF_xxx
unsigned short sa_data[14]; //14 bytes of protocol addr
}
struct sockaddr_in {
short int sin_family; // set to AF_INET
unsigned short int sin_port; // Port number
struct in_addr sin_addr; // Internet address
unsigned char sin_zero[8]; //set to all zeros
}
Dealing with IP Addresses
●
●
int inet_aton(const char *cp, struct in_addr *inp);
– inet_aton() gives non-zero on success; zero on failure
●
To convert binary IP to string: inet_noa()
printf(“ %s” ,inet_ntoa(my_addr.sin_addr));
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
inet_aton(“10.0.0.5”,&(my_addr.sin_addr));
memset(&(my_addr.sin_zero),'0',8);
struct in_addr {
unsigned long s_addr; // that's a 32­bit long, or 4 bytes
};
bind() - what port am I on?
●
Used to associate a socket with a port on the local
machine
– The port number is used by the kernel to match an
incoming packet to a process
●
int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
– sockfd is the socket descriptor returned by socket()
– my_addr is pointer to struct sockaddr that contains
information about your IP address and port
– addrlen is set to sizeof(struct sockaddr)
– returns -1 on error
– my_addr.sin_port = 0; //choose an unused port at
random
– my_addr.sin_addr.s_addr = INADDR_ANY; //use my IP
adr
Example
int sockfd;
struct sockaddr_in my_addr;
sockfd = socket(PF_INET, SOCK_STREAM, 0);
my_addr.sin_family = AF_INET; // host byte order
my_addr.sin_port = htons(MYPORT); // short, network byte
order
my_addr.sin_addr.s_addr = inet_addr("172.28.44.57");
memset(&(my_addr.sin_zero), '0', 8); // zero the rest of the struct
bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct
sockaddr));
/****** Code needs error checking. Don't forget to do that ****** /
connect() - Hello!
●
Connects to a remote host
●
int connect(int sockfd, struct sockaddr *serv_addr, int
addrlen)
– sockfd is the socket descriptor returned by socket()
– serv_addr is pointer to struct sockaddr that
contains information on destination IP address and
port
– addrlen is set to sizeof(struct sockaddr)
– returns -1 on error
●
No need to bind(), kernel will choose a port
Example
#define DEST_IP "172.28.44.57"
#define DEST_PORT 5000
main(){
int sockfd;
struct sockaddr_in dest_addr; // will hold the destination addr
sockfd = socket(PF_INET, SOCK_STREAM, 0);
dest_addr.sin_family = AF_INET; // host byte order
dest_addr.sin_port = htons(DEST_PORT); // network byte
order
dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
memset(&(dest_addr.sin_zero), '0', 8); // zero the rest of the
struct connect(sockfd, (struct sockaddr *)&dest_addr,
sizeof(struct sockaddr));
/******* Don't forget error checking ********/
listen() - Call me please!
●
Waits for incoming connections
●
int listen(int sockfd, int backlog);
– sockfd is the socket file descriptor returned by
socket()
– backlog is the number of connections allowed on
the incoming queue
– listen() returns -1 on error
– Need to call bind() before you can listen()
●
socket()
●
bind()
●
listen()
●
accept()
accept() - Thank you for calling !
●
accept() gets the pending connection on the
port you are listen()ing on
●
int accept(int sockfd, void *addr, int *addrlen);
– sockfd is the listening socket descriptor
– information about incoming connection is stored in
addr which is a pointer to a local struct sockaddr_in
– addrlen is set to sizeof(struct sockaddr_in)
– accept returns a new socket file descriptor to use
for this accepted connection and -1 on error
Example
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define MYPORT 3490 // the port users will be connecting to
#define BACKLOG 10 // pending connections queue will hold
main(){
int sockfd, new_fd; // listen on sock_fd, new connection on
new_fd
struct sockaddr_in my_addr; // my address information
struct sockaddr_in their_addr; // connector's address information
int sin_size;
sockfd = socket(PF_INET, SOCK_STREAM, 0);
Cont...
my_addr.sin_family = AF_INET; // host byte order
my_addr.sin_port = htons(MYPORT); // short, network byte
order
my_addr.sin_addr.s_addr = INADDR_ANY; // auto-fill with my IP
memset(&(my_addr.sin_zero), '0', 8); // zero the rest of the struct
// don't forget your error checking for these calls:
bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct
sockaddr));
listen(sockfd, BACKLOG);
sin_size = sizeof(struct sockaddr_in);
new_fd = accept(sockfd, (struct sockaddr *)&their_addr,
&sin_size);
send() and recv() - Let's talk!
●
The two functions are for communicating over
stream sockets or connected datagram sockets.
●
int send(int sockfd, const void *msg, int len, int
flags);
– sockfd is the socket descriptor you want to send data to
(returned by socket() or got from accept())
– msg is a pointer to the data you want to send
– len is the length of that data in bytes
– set flags to 0 for now
– sent() returns the number of bytes actually sent (may
be less than the number you told it to send) or -1 on
error

More Related Content

PDF
PPT
Basic socket programming
PDF
Network Programming Assignment Help
PPT
INTRODUCTION TO SOCKETS IN COMPUTER NETWORKS DEPT OF CSE.ppt
PPT
sockets_intro.ppt
PPT
Sockets
PPTX
L5-Sockets.pptx
PDF
lab04.pdf
Basic socket programming
Network Programming Assignment Help
INTRODUCTION TO SOCKETS IN COMPUTER NETWORKS DEPT OF CSE.ppt
sockets_intro.ppt
Sockets
L5-Sockets.pptx
lab04.pdf

Similar to sockets (20)

PPTX
Basics of sockets
PPT
Np unit2
PPT
Socket Programming
PPT
Sockets intro
PPT
Socket System Calls
PPT
03-socketprogramming for college students.ppt
PPT
03-socketprogrsamming forcoleeger students.ppt
PPT
Introduction to sockets tcp ip protocol.ppt
PDF
socketProgramming-TCP-and UDP-overview.pdf
PDF
Socket programming
PPTX
Socket programming
PPTX
Socket programming
PPT
Sockets in unix
PPTX
Socket programming in c
PPTX
Lecture 1 Socket programming elementary tcp sockets.pptx
PDF
Socket programming using C
PPTX
Byte Ordering - Unit 2.pptx
PDF
Socket Programming
PPT
LECTURE-17(Socket Programming) Detailed.
PPTX
IPC SOCKET
Basics of sockets
Np unit2
Socket Programming
Sockets intro
Socket System Calls
03-socketprogramming for college students.ppt
03-socketprogrsamming forcoleeger students.ppt
Introduction to sockets tcp ip protocol.ppt
socketProgramming-TCP-and UDP-overview.pdf
Socket programming
Socket programming
Socket programming
Sockets in unix
Socket programming in c
Lecture 1 Socket programming elementary tcp sockets.pptx
Socket programming using C
Byte Ordering - Unit 2.pptx
Socket Programming
LECTURE-17(Socket Programming) Detailed.
IPC SOCKET
Ad

Recently uploaded (20)

PPTX
Fundamentals of safety and accident prevention -final (1).pptx
PDF
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
PDF
737-MAX_SRG.pdf student reference guides
PPTX
CYBER-CRIMES AND SECURITY A guide to understanding
PDF
null (2) bgfbg bfgb bfgb fbfg bfbgf b.pdf
PDF
III.4.1.2_The_Space_Environment.p pdffdf
PPT
introduction to datamining and warehousing
PPTX
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
PPTX
Construction Project Organization Group 2.pptx
PDF
Human-AI Collaboration: Balancing Agentic AI and Autonomy in Hybrid Systems
PPTX
additive manufacturing of ss316l using mig welding
PDF
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
PDF
Automation-in-Manufacturing-Chapter-Introduction.pdf
PPTX
UNIT-1 - COAL BASED THERMAL POWER PLANTS
PPTX
Geodesy 1.pptx...............................................
PPTX
Foundation to blockchain - A guide to Blockchain Tech
PPTX
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
PDF
A SYSTEMATIC REVIEW OF APPLICATIONS IN FRAUD DETECTION
PDF
Well-logging-methods_new................
PPTX
Safety Seminar civil to be ensured for safe working.
Fundamentals of safety and accident prevention -final (1).pptx
Mitigating Risks through Effective Management for Enhancing Organizational Pe...
737-MAX_SRG.pdf student reference guides
CYBER-CRIMES AND SECURITY A guide to understanding
null (2) bgfbg bfgb bfgb fbfg bfbgf b.pdf
III.4.1.2_The_Space_Environment.p pdffdf
introduction to datamining and warehousing
M Tech Sem 1 Civil Engineering Environmental Sciences.pptx
Construction Project Organization Group 2.pptx
Human-AI Collaboration: Balancing Agentic AI and Autonomy in Hybrid Systems
additive manufacturing of ss316l using mig welding
The CXO Playbook 2025 – Future-Ready Strategies for C-Suite Leaders Cerebrai...
Automation-in-Manufacturing-Chapter-Introduction.pdf
UNIT-1 - COAL BASED THERMAL POWER PLANTS
Geodesy 1.pptx...............................................
Foundation to blockchain - A guide to Blockchain Tech
Infosys Presentation by1.Riyan Bagwan 2.Samadhan Naiknavare 3.Gaurav Shinde 4...
A SYSTEMATIC REVIEW OF APPLICATIONS IN FRAUD DETECTION
Well-logging-methods_new................
Safety Seminar civil to be ensured for safe working.
Ad

sockets

  • 1. Byte Ordering ● Two types of “ Byte ordering” – Network Byte Order: High-order byte of the number is stored in memory at the lowest address – Host Byte Order: Low-order byte of the number is stored in memory at the lowest address – Network stack (TCP/IP) expects Network Byte Order ● Conversions: – htons() - Host to Network Short – htonl() - Host to Network Long – ntohs() - Network to Host Short – ntohl() - Network to Host Long
  • 2. What is a socket? ● Socket: An interface between an application process and transport layer – The application process can send/receive messages to/from another application process (local or remote)via a socket ● In Unix jargon, a socket is a file descriptor – an integer associated with an open file ● Types of Sockets: Internet Sockets, unix sockets, X.25 sockets etc – Internet sockets characterized by IP Address (4 bytes), port number (2 bytes)
  • 5. Types of Internet Sockets ● Stream Sockets (SOCK_STREAM) – Connection oriented – Rely on TCP to provide reliable two-way connected communication ● Datagram Sockets (SOCK_DGRAM) – Rely on UDP – Connection is unreliable
  • 6. socket() -- Get the file descriptor ● int socket(int domain, int type, int protocol); – domain should be set to PF_INET – type can be SOCK_STREAM or SOCK_DGRAM – set protocol to 0 to have socket choose the correct protocol based on type – socket() returns a socket descriptor for use in later system calls or -1 on error int sockfd; sockfd = socket (PF_INET, SOCK_STREAM, 0);
  • 7. Socket Structures ● struct sockaddr: Holds socket address information for many types of sockets ● struct sockaddr_in: A parallel structure that makes it easy to reference elements of the socket address ● sin_port and sin_addr must be in Network Byte Order struct sockaddr { unsigned short sa_family; //address family AF_xxx unsigned short sa_data[14]; //14 bytes of protocol addr } struct sockaddr_in { short int sin_family; // set to AF_INET unsigned short int sin_port; // Port number struct in_addr sin_addr; // Internet address unsigned char sin_zero[8]; //set to all zeros }
  • 8. Dealing with IP Addresses ● ● int inet_aton(const char *cp, struct in_addr *inp); – inet_aton() gives non-zero on success; zero on failure ● To convert binary IP to string: inet_noa() printf(“ %s” ,inet_ntoa(my_addr.sin_addr)); struct sockaddr_in my_addr; my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); inet_aton(“10.0.0.5”,&(my_addr.sin_addr)); memset(&(my_addr.sin_zero),'0',8); struct in_addr { unsigned long s_addr; // that's a 32­bit long, or 4 bytes };
  • 9. bind() - what port am I on? ● Used to associate a socket with a port on the local machine – The port number is used by the kernel to match an incoming packet to a process ● int bind(int sockfd, struct sockaddr *my_addr, int addrlen) – sockfd is the socket descriptor returned by socket() – my_addr is pointer to struct sockaddr that contains information about your IP address and port – addrlen is set to sizeof(struct sockaddr) – returns -1 on error – my_addr.sin_port = 0; //choose an unused port at random – my_addr.sin_addr.s_addr = INADDR_ANY; //use my IP adr
  • 10. Example int sockfd; struct sockaddr_in my_addr; sockfd = socket(PF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = inet_addr("172.28.44.57"); memset(&(my_addr.sin_zero), '0', 8); // zero the rest of the struct bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); /****** Code needs error checking. Don't forget to do that ****** /
  • 11. connect() - Hello! ● Connects to a remote host ● int connect(int sockfd, struct sockaddr *serv_addr, int addrlen) – sockfd is the socket descriptor returned by socket() – serv_addr is pointer to struct sockaddr that contains information on destination IP address and port – addrlen is set to sizeof(struct sockaddr) – returns -1 on error ● No need to bind(), kernel will choose a port
  • 12. Example #define DEST_IP "172.28.44.57" #define DEST_PORT 5000 main(){ int sockfd; struct sockaddr_in dest_addr; // will hold the destination addr sockfd = socket(PF_INET, SOCK_STREAM, 0); dest_addr.sin_family = AF_INET; // host byte order dest_addr.sin_port = htons(DEST_PORT); // network byte order dest_addr.sin_addr.s_addr = inet_addr(DEST_IP); memset(&(dest_addr.sin_zero), '0', 8); // zero the rest of the struct connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)); /******* Don't forget error checking ********/
  • 13. listen() - Call me please! ● Waits for incoming connections ● int listen(int sockfd, int backlog); – sockfd is the socket file descriptor returned by socket() – backlog is the number of connections allowed on the incoming queue – listen() returns -1 on error – Need to call bind() before you can listen() ● socket() ● bind() ● listen() ● accept()
  • 14. accept() - Thank you for calling ! ● accept() gets the pending connection on the port you are listen()ing on ● int accept(int sockfd, void *addr, int *addrlen); – sockfd is the listening socket descriptor – information about incoming connection is stored in addr which is a pointer to a local struct sockaddr_in – addrlen is set to sizeof(struct sockaddr_in) – accept returns a new socket file descriptor to use for this accepted connection and -1 on error
  • 15. Example #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #define MYPORT 3490 // the port users will be connecting to #define BACKLOG 10 // pending connections queue will hold main(){ int sockfd, new_fd; // listen on sock_fd, new connection on new_fd struct sockaddr_in my_addr; // my address information struct sockaddr_in their_addr; // connector's address information int sin_size; sockfd = socket(PF_INET, SOCK_STREAM, 0);
  • 16. Cont... my_addr.sin_family = AF_INET; // host byte order my_addr.sin_port = htons(MYPORT); // short, network byte order my_addr.sin_addr.s_addr = INADDR_ANY; // auto-fill with my IP memset(&(my_addr.sin_zero), '0', 8); // zero the rest of the struct // don't forget your error checking for these calls: bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); listen(sockfd, BACKLOG); sin_size = sizeof(struct sockaddr_in); new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size);
  • 17. send() and recv() - Let's talk! ● The two functions are for communicating over stream sockets or connected datagram sockets. ● int send(int sockfd, const void *msg, int len, int flags); – sockfd is the socket descriptor you want to send data to (returned by socket() or got from accept()) – msg is a pointer to the data you want to send – len is the length of that data in bytes – set flags to 0 for now – sent() returns the number of bytes actually sent (may be less than the number you told it to send) or -1 on error