SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Advanced Sockets Programming

      Ref: Chapter 7,11,21,22




                                1
• Socket Options • Posix name/address conversion

• Out-of-Band Data     • Signal Driven I/O

• It's important to know about some of these
  topics, although it might not be apparent
  how and when to use them.

• Details are in the book - we are just trying
  to get some idea of what can be done.


                                                   2
Socket Options
• Various attributes that are used to determine
  the behavior of sockets.
• Setting options tells the OS/Protocol Stack
  the behavior we want.
• Support for generic options (apply to all
  sockets) and protocol specific options.



                                                  3
Option types
• Many socket options are boolean flags
  indicating whether some feature is enabled
  (1) or disabled (0).
• Other options are associated with more
  complex types including int,
  timeval, in_addr, sockaddr, etc.
• Some options are readable only (we can’t
  set the value).
                                               4
Setting and Getting option values
getsockopt() gets the current value of a
 socket option.

setsockopt() is used to set the value of a
 socket option.




                                             5
int getsockopt( int sockfd,
                int level,
                int optname,
                void *opval,
                socklen_t *optlen);


level specifies whether the option is a
 general option or a protocol specific option
 (what level of code should interpret the
 option).


                                                6
int setsockopt( int sockfd,
                int level,
                int optname,
                const void *opval,
                socklen_t optlen);


level specifies whether the option is a
 general option or a protocol specific option
 (what level of code should interpret the
 option).

                                                7
General Options
• Protocol independent options.
• Handled by the generic socket system code.
• Some options are supported only by specific
  types of sockets (SOCK_DGRAM,
  SOCK_STREAM).




                                                8
Some Generic Options
SO_BROADCAST
SO_DONTROUTE
SO_ERROR
SO_KEEPALIVE
SO_LINGER
SO_RCVBUF,SO_SNDBUF
SO_REUSEADDR
                          9
SO_BROADCAST
• Boolean option: enables/disables sending of
  broadcast messages.
• Underlying DL layer must support
  broadcasting!
• Applies only to SOCK_DGRAM sockets.
• Prevents applications from inadvertently
  sending broadcasts (OS looks for this flag
  when broadcast address is specified).
                                                10
SO_DONTROUTE
• Boolean option: enables bypassing of
  normal routing.
• Used by routing daemons.




                                         11
SO_ERROR
• Integer value option.
• Value is an error indicator value as used by
  errno.
• Readable (get’able) only!
• Reading (by calling getsockopt())
  clears any pending error.


                                                 12
SO_KEEPALIVE
• Boolen option: enabled means that
  STREAM sockets should send a probe to
  peer if no data flow for a “long time”.
• Used by TCP - allows a process to
  determine whether peer process/host has
  crashed.
• Consider what would happen to an open
  telnet connection without keepalive.
                                            13
SO_LINGER
• Value is:
struct linger {
     int l_onoff;  /* 0 = off */
     int l_linger; /* time in seconds */
};
• Used to control whether and how long a call
  to close will wait for pending ACKS.
• connection-oriented sockets only.
                                                14
SO_LINGER
• By default, calling close() on a TCP
  socket will return immediately.
• The closing process has no way of knowing
  whether or not the peer received all data.
• Setting SO_LINGER means the closing
  process can determine that the peer machine
  has received the data (but not that the data
  has been read() !).
                                                 15
SO_RCVBUF
              SO_SNDBUF
• Integer values options - change the receive
  and send buffer sizes.
• Can be used with STREAM and DGRAM
  sockets.
• With TCP, this option effects the window
  size used for flow control - must be
  established before connection is made.

                                                16
SO_REUSEADDR
• Boolean option: enables binding to an
  address (port) that is already in use.
• Used by servers that are transient - allows
  binding a passive socket to a port currently
  in use (with active sockets) by other
  processes.
• Can be used to establish separate servers for
  the same service on different interfaces (or
  different IP addresses on the same interface)   17
IP Options (IPv4)
• IP_HDRINCL: used on raw IP sockets
  when we want to build the IP header
  ourselves.
• IP_TOS: allows us to set the “Type-of-
  service” field in an IP header.
• IP_TTL: allows us to set the “Time-to-live”
  field in an IP header.

                                                18
TCP socket options
• TCP_KEEPALIVE: set the idle time used
  when SO_KEEPALIVE is enabled.
• TCP_MAXSEG: set the maximum segment
  size sent by a TCP socket.
• TCP_NODELAY: can disable TCP’s Nagle
  algorithm that delays sending small packets
  if there is unACK’d data pending.

                                                19
• This was just an overview
  – there are many details associated with the
    options described.
  – There are many options that haven’t been
    described.




                                                 20
Posix Name/Adress Conversion
• We've seen gethostbyname and
  gethostbyaddr - these are protocol
  dependent.
  – Not part of sockets library.
• Posix includes protocol independent
  functions:
      getaddrinfo()          getnameinfo()


                                             21
getaddrinfo, getnameinfo
• These functions provide name/address
  conversions as part of the sockets library.
• In the future it will be important to write
  code that can run on many protocols (IPV4,
  IPV6), but for now these functions are not
  widely available.
  – It's worth seeing how they work even though
    we probably can't use them yet!

                                                  22
getaddrinfo()
• Puts protocol dependence in library (where
  it belongs).
  – Same code can be used for many protocols, we
    will see examples when we talk about IPV6
  – re-entrant function - gethostbyname is not!
     • Important to threaded applications.




                                                   23
getaddrinfo()
int getaddrinfo(
     const char *hostname,
     const char *service,
     const struct addrinfo* hints,
     struct addrinfo **result);


getaddrinfo() replaces both gethostbyname()
  and getservbyname()


                                              24
getaddrinfo()
Hostname is a hostname or an address string (dotted
  decimal string for IP).

Service is a service name or a decimal port number
  string.




                                                      25
struct addrinfo

struct addrinfo {
  int     ai_flags;
  int     ai_family;
  int     ai_socktype;
  int     ai_protocol;
  size_t ai_addrlen;
                                         li st!
  char    *canonname;               ed
  struct sockaddr *ai_addr;   L ink
  struct addrinfo *ai_next;
};
                                              26
getaddrinfo()
hints is an addrinfo * (can be NULL) that can
  contain:
  – ai_flags     (AI_PASSIVE , AI_CANONNAME )
  – ai_family    (AF_XXX )
  – ai_socktype        (SOCK_XXX )
  – ai_protocol        (IPPROTO_TCP, etc.)




                                                27
getaddrinfo
result is returned with the address of a pointer to
  an addrinfo structure that is the head of a
  linked list.

It is possible to get multiple structures:
   – multiple addresses associated with the hostname.
   – The service is provided for multiple socket types.




                                                          28
addrinfo usage

ai_flags             Used in call to socket()
ai_family
ai_socktype
ai_protocol        Used in call to bind(), connect()
ai_addrlen               or sendto()
ai_canonname
ai_addr
ai_next
                     ai_flags
                     ai_family
                     ai_socktype
                     ai_protocol
                     ai_addrlen
                     ai_canonname
                     ai_addr
                     ai_next
                                                  29
getnameinfo()
int getnameinfo(
     const struct sockaddr *sockaddr,
     socklen_t addrlen
     char *host,
     size_t hostlen,
     char *serv,
     size_t servlen,
     int flags);


getnameinfo() looks up a hostname and a service
  name given a sockaddr
                                                  30
Out-of-Band Date
• Ever been on a date, gone to a dance club
  and the band doesn't show up?
  – This is becoming a serious problem:
     • The number of Internet dating services is growing
       exponentially.
     • The number of bands is not growing.
  – RFC 90210 proposes some short term solutions
    (until the number of bands can be increased).


                                                           31
Out-of-Band Data
• TCP (and other transport layers) provide a
  mechanism for delivery of quot;high priorityquot;
  data ahead of quot;normal dataquot;.
• We can almost think of this as 2 streams:
                   normal data

  TCP PORT                          TCP PORT
      A                                 B

                  special data

                                               32
TCP OOB Data
• TCP supports something like OOB data
  using URGENT MODE (a bit is send in a
  TCP segment header).
• A TCP segment header field contains an
  indication of the location of the urgent data
  in the stream (the byte number).
• The details are not important to us (we just
  want to see how to use this in our program).
                                                  33
Sending OOB Data
           send(sd,buff,1,MSG_OOB);


Can use send() to put a single byte of urgent data in a
  TCP stream.

The TCP layer adds some segment header info to let
  the other end know there is some OOB data.
The TCP layer on the receiving end treats the data
  marked as urgent in a special way.
                                                          34
Receiving OOB Data
• The TCP layer generates a SIGURG signal
  in the receiving process.
• Select() will tell you an exception
  condition is present.
• Depending on how things are set up:
  – the data can be read using recv() with a
    MSG_OOB flag set.
  – The data can be read inline and the receiving
    process can moniter the out-of-band-mark for
    the connection (using sockatmark())

                                                    35
So what?
• OOB Data might be used:
  – a heartbeat between the client and server to
    detect early failure (example in the book).
  – A way to communicate an exceptional
    condition to a peer even when flow control has
    stopped the sender.




                                                     36
Singles Driven IOU
• Another problem with Internet Dating
  services is the lack of single drivers in many
  metropolitan areas.
  – Neither participant can pick up the other.
  – Dating protocols degrade to involve online
    communication only.
  – Proxy drivers (running TAXI protocol) get
    overloaded and refuse IOU packets.

                                                   37
Signal Driven I/O
• We can tell the kernel to send a SIGIO
  signal whenever something happens to a
  socket descriptor.
• The signal handler must determine what
  conditions caused the signal and take
  appropriate action.



                                           38
Signal Driven UDP
• SIGIO occurs whenever:
  – an incoming datagram arrives.
  – An asynchronous error occurs.
     • Could be ICMP error (unreachable, invalid address,
       etc).
• Could allow process to handle other tasks
  and still watch for incoming UDP messages.


                                                            39
Signal Driven TCP
• SIGIO occurs whenever:
  – an incoming connection has completed.
  – Disconnect request initiated.
  – Disconnect request completed.
  – Half a connection shutdown.
  – Data has arrived.
  – Data has been sent (indicating there is buffer space)
  – asynchronous error
                                                            40

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Complex Programmable Logic Device (CPLD) Architecture and Its Applications
Complex Programmable Logic Device (CPLD) Architecture and Its ApplicationsComplex Programmable Logic Device (CPLD) Architecture and Its Applications
Complex Programmable Logic Device (CPLD) Architecture and Its Applications
 
Cisco: QoS
Cisco: QoSCisco: QoS
Cisco: QoS
 
TCP and UDP
TCP and UDP TCP and UDP
TCP and UDP
 
How BGP Works
How BGP WorksHow BGP Works
How BGP Works
 
Bootstrapping in Compiler
Bootstrapping in CompilerBootstrapping in Compiler
Bootstrapping in Compiler
 
Chap 09 icmp
Chap 09 icmpChap 09 icmp
Chap 09 icmp
 
Soc architecture and design
Soc architecture and designSoc architecture and design
Soc architecture and design
 
Ip addressing
Ip addressingIp addressing
Ip addressing
 
Bgp protocol
Bgp protocolBgp protocol
Bgp protocol
 
Arp and rarp
Arp and rarpArp and rarp
Arp and rarp
 
COCOMO model
COCOMO modelCOCOMO model
COCOMO model
 
TCP Vs UDP
TCP Vs UDP TCP Vs UDP
TCP Vs UDP
 
Routing Information Protocol
Routing Information ProtocolRouting Information Protocol
Routing Information Protocol
 
Vlsm
VlsmVlsm
Vlsm
 
OPEN STA
OPEN STAOPEN STA
OPEN STA
 
VERILOG HDL :: Blocking & NON- Blocking assignments
VERILOG HDL :: Blocking & NON- Blocking assignments VERILOG HDL :: Blocking & NON- Blocking assignments
VERILOG HDL :: Blocking & NON- Blocking assignments
 
Xilinx lca and altera flex
Xilinx lca and altera flexXilinx lca and altera flex
Xilinx lca and altera flex
 
Ethernet
EthernetEthernet
Ethernet
 
Network layer logical addressing
Network layer logical addressingNetwork layer logical addressing
Network layer logical addressing
 
SOC Design Challenges and Practices
SOC Design Challenges and PracticesSOC Design Challenges and Practices
SOC Design Challenges and Practices
 

Destaque

Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScriptelliando dias
 
SharePoint Governance and Lifecycle Management with Project Server 2010
SharePoint Governance and Lifecycle Management with Project Server 2010SharePoint Governance and Lifecycle Management with Project Server 2010
SharePoint Governance and Lifecycle Management with Project Server 2010Alexander Burton
 
Advanced java programming-contents
Advanced java programming-contentsAdvanced java programming-contents
Advanced java programming-contentsSelf-Employed
 
Internet programming lecture 1
Internet programming lecture 1Internet programming lecture 1
Internet programming lecture 1Mohammed Hussein
 
indrodução automação industrial
indrodução automação industrialindrodução automação industrial
indrodução automação industrialelliando dias
 
Introduction to visual basic programming
Introduction to visual basic programmingIntroduction to visual basic programming
Introduction to visual basic programmingRoger Argarin
 

Destaque (7)

Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
SharePoint Governance and Lifecycle Management with Project Server 2010
SharePoint Governance and Lifecycle Management with Project Server 2010SharePoint Governance and Lifecycle Management with Project Server 2010
SharePoint Governance and Lifecycle Management with Project Server 2010
 
Advanced java programming-contents
Advanced java programming-contentsAdvanced java programming-contents
Advanced java programming-contents
 
Internet programming lecture 1
Internet programming lecture 1Internet programming lecture 1
Internet programming lecture 1
 
indrodução automação industrial
indrodução automação industrialindrodução automação industrial
indrodução automação industrial
 
Socket System Calls
Socket System CallsSocket System Calls
Socket System Calls
 
Introduction to visual basic programming
Introduction to visual basic programmingIntroduction to visual basic programming
Introduction to visual basic programming
 

Semelhante a Advanced Sockets Programming

TCP IP
TCP IPTCP IP
TCP IPhivasu
 
Socket Programming
Socket ProgrammingSocket Programming
Socket ProgrammingCEC Landran
 
Socket programming using C
Socket programming using CSocket programming using C
Socket programming using CAjit Nayak
 
Introduction to sockets tcp ip protocol.ppt
Introduction to sockets tcp ip protocol.pptIntroduction to sockets tcp ip protocol.ppt
Introduction to sockets tcp ip protocol.pptMajedAboubennah
 
Surviving The Stump The Chump Interview Questions
Surviving The Stump The Chump Interview QuestionsSurviving The Stump The Chump Interview Questions
Surviving The Stump The Chump Interview QuestionsDuane Bodle
 
acn-practical_manual-19-20-1 final.pdf
acn-practical_manual-19-20-1 final.pdfacn-practical_manual-19-20-1 final.pdf
acn-practical_manual-19-20-1 final.pdfQual4
 
Linux Networking Commands
Linux Networking CommandsLinux Networking Commands
Linux Networking Commandstmavroidis
 
Advanced RAC troubleshooting: Network
Advanced RAC troubleshooting: NetworkAdvanced RAC troubleshooting: Network
Advanced RAC troubleshooting: NetworkRiyaj Shamsudeen
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Andriy Berestovskyy
 
File 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsxFile 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsxgaurav201196
 

Semelhante a Advanced Sockets Programming (20)

Np unit2
Np unit2Np unit2
Np unit2
 
Basic socket programming
Basic socket programmingBasic socket programming
Basic socket programming
 
TCP IP
TCP IPTCP IP
TCP IP
 
Socket Programming
Socket ProgrammingSocket Programming
Socket Programming
 
Sockets
SocketsSockets
Sockets
 
Socket programming using C
Socket programming using CSocket programming using C
Socket programming using C
 
L5-Sockets.pptx
L5-Sockets.pptxL5-Sockets.pptx
L5-Sockets.pptx
 
Socket programming
Socket programming Socket programming
Socket programming
 
sockets
socketssockets
sockets
 
Introduction to sockets tcp ip protocol.ppt
Introduction to sockets tcp ip protocol.pptIntroduction to sockets tcp ip protocol.ppt
Introduction to sockets tcp ip protocol.ppt
 
A.java
A.javaA.java
A.java
 
Surviving The Stump The Chump Interview Questions
Surviving The Stump The Chump Interview QuestionsSurviving The Stump The Chump Interview Questions
Surviving The Stump The Chump Interview Questions
 
acn-practical_manual-19-20-1 final.pdf
acn-practical_manual-19-20-1 final.pdfacn-practical_manual-19-20-1 final.pdf
acn-practical_manual-19-20-1 final.pdf
 
Networking chapter VI
Networking chapter VINetworking chapter VI
Networking chapter VI
 
Linux Networking Commands
Linux Networking CommandsLinux Networking Commands
Linux Networking Commands
 
Advanced RAC troubleshooting: Network
Advanced RAC troubleshooting: NetworkAdvanced RAC troubleshooting: Network
Advanced RAC troubleshooting: Network
 
Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)Network Programming: Data Plane Development Kit (DPDK)
Network Programming: Data Plane Development Kit (DPDK)
 
Basics of sockets
Basics of socketsBasics of sockets
Basics of sockets
 
File 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsxFile 10 - CSX 334 _VRA NBO.ppsx
File 10 - CSX 334 _VRA NBO.ppsx
 
123
123123
123
 

Mais de elliando dias

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slideselliando dias
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structureselliando dias
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de containerelliando dias
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agilityelliando dias
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Librarieselliando dias
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!elliando dias
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Webelliando dias
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduinoelliando dias
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorceryelliando dias
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Designelliando dias
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makeselliando dias
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.elliando dias
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebookelliando dias
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Studyelliando dias
 
From Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn IntroductionFrom Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn Introductionelliando dias
 

Mais de elliando dias (20)

Clojurescript slides
Clojurescript slidesClojurescript slides
Clojurescript slides
 
Functional Programming with Immutable Data Structures
Functional Programming with Immutable Data StructuresFunctional Programming with Immutable Data Structures
Functional Programming with Immutable Data Structures
 
Nomenclatura e peças de container
Nomenclatura  e peças de containerNomenclatura  e peças de container
Nomenclatura e peças de container
 
Geometria Projetiva
Geometria ProjetivaGeometria Projetiva
Geometria Projetiva
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
 
Javascript Libraries
Javascript LibrariesJavascript Libraries
Javascript Libraries
 
How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!How to Make an Eight Bit Computer and Save the World!
How to Make an Eight Bit Computer and Save the World!
 
Ragel talk
Ragel talkRagel talk
Ragel talk
 
A Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the WebA Practical Guide to Connecting Hardware to the Web
A Practical Guide to Connecting Hardware to the Web
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Minicurso arduino
Minicurso arduinoMinicurso arduino
Minicurso arduino
 
Incanter Data Sorcery
Incanter Data SorceryIncanter Data Sorcery
Incanter Data Sorcery
 
Rango
RangoRango
Rango
 
Fab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine DesignFab.in.a.box - Fab Academy: Machine Design
Fab.in.a.box - Fab Academy: Machine Design
 
The Digital Revolution: Machines that makes
The Digital Revolution: Machines that makesThe Digital Revolution: Machines that makes
The Digital Revolution: Machines that makes
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
 
Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.Hadoop - Simple. Scalable.
Hadoop - Simple. Scalable.
 
Hadoop and Hive Development at Facebook
Hadoop and Hive Development at FacebookHadoop and Hive Development at Facebook
Hadoop and Hive Development at Facebook
 
Multi-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case StudyMulti-core Parallelization in Clojure - a Case Study
Multi-core Parallelization in Clojure - a Case Study
 
From Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn IntroductionFrom Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn Introduction
 

Último

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 

Último (20)

TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 

Advanced Sockets Programming

  • 1. Advanced Sockets Programming Ref: Chapter 7,11,21,22 1
  • 2. • Socket Options • Posix name/address conversion • Out-of-Band Data • Signal Driven I/O • It's important to know about some of these topics, although it might not be apparent how and when to use them. • Details are in the book - we are just trying to get some idea of what can be done. 2
  • 3. Socket Options • Various attributes that are used to determine the behavior of sockets. • Setting options tells the OS/Protocol Stack the behavior we want. • Support for generic options (apply to all sockets) and protocol specific options. 3
  • 4. Option types • Many socket options are boolean flags indicating whether some feature is enabled (1) or disabled (0). • Other options are associated with more complex types including int, timeval, in_addr, sockaddr, etc. • Some options are readable only (we can’t set the value). 4
  • 5. Setting and Getting option values getsockopt() gets the current value of a socket option. setsockopt() is used to set the value of a socket option. 5
  • 6. int getsockopt( int sockfd, int level, int optname, void *opval, socklen_t *optlen); level specifies whether the option is a general option or a protocol specific option (what level of code should interpret the option). 6
  • 7. int setsockopt( int sockfd, int level, int optname, const void *opval, socklen_t optlen); level specifies whether the option is a general option or a protocol specific option (what level of code should interpret the option). 7
  • 8. General Options • Protocol independent options. • Handled by the generic socket system code. • Some options are supported only by specific types of sockets (SOCK_DGRAM, SOCK_STREAM). 8
  • 10. SO_BROADCAST • Boolean option: enables/disables sending of broadcast messages. • Underlying DL layer must support broadcasting! • Applies only to SOCK_DGRAM sockets. • Prevents applications from inadvertently sending broadcasts (OS looks for this flag when broadcast address is specified). 10
  • 11. SO_DONTROUTE • Boolean option: enables bypassing of normal routing. • Used by routing daemons. 11
  • 12. SO_ERROR • Integer value option. • Value is an error indicator value as used by errno. • Readable (get’able) only! • Reading (by calling getsockopt()) clears any pending error. 12
  • 13. SO_KEEPALIVE • Boolen option: enabled means that STREAM sockets should send a probe to peer if no data flow for a “long time”. • Used by TCP - allows a process to determine whether peer process/host has crashed. • Consider what would happen to an open telnet connection without keepalive. 13
  • 14. SO_LINGER • Value is: struct linger { int l_onoff; /* 0 = off */ int l_linger; /* time in seconds */ }; • Used to control whether and how long a call to close will wait for pending ACKS. • connection-oriented sockets only. 14
  • 15. SO_LINGER • By default, calling close() on a TCP socket will return immediately. • The closing process has no way of knowing whether or not the peer received all data. • Setting SO_LINGER means the closing process can determine that the peer machine has received the data (but not that the data has been read() !). 15
  • 16. SO_RCVBUF SO_SNDBUF • Integer values options - change the receive and send buffer sizes. • Can be used with STREAM and DGRAM sockets. • With TCP, this option effects the window size used for flow control - must be established before connection is made. 16
  • 17. SO_REUSEADDR • Boolean option: enables binding to an address (port) that is already in use. • Used by servers that are transient - allows binding a passive socket to a port currently in use (with active sockets) by other processes. • Can be used to establish separate servers for the same service on different interfaces (or different IP addresses on the same interface) 17
  • 18. IP Options (IPv4) • IP_HDRINCL: used on raw IP sockets when we want to build the IP header ourselves. • IP_TOS: allows us to set the “Type-of- service” field in an IP header. • IP_TTL: allows us to set the “Time-to-live” field in an IP header. 18
  • 19. TCP socket options • TCP_KEEPALIVE: set the idle time used when SO_KEEPALIVE is enabled. • TCP_MAXSEG: set the maximum segment size sent by a TCP socket. • TCP_NODELAY: can disable TCP’s Nagle algorithm that delays sending small packets if there is unACK’d data pending. 19
  • 20. • This was just an overview – there are many details associated with the options described. – There are many options that haven’t been described. 20
  • 21. Posix Name/Adress Conversion • We've seen gethostbyname and gethostbyaddr - these are protocol dependent. – Not part of sockets library. • Posix includes protocol independent functions: getaddrinfo() getnameinfo() 21
  • 22. getaddrinfo, getnameinfo • These functions provide name/address conversions as part of the sockets library. • In the future it will be important to write code that can run on many protocols (IPV4, IPV6), but for now these functions are not widely available. – It's worth seeing how they work even though we probably can't use them yet! 22
  • 23. getaddrinfo() • Puts protocol dependence in library (where it belongs). – Same code can be used for many protocols, we will see examples when we talk about IPV6 – re-entrant function - gethostbyname is not! • Important to threaded applications. 23
  • 24. getaddrinfo() int getaddrinfo( const char *hostname, const char *service, const struct addrinfo* hints, struct addrinfo **result); getaddrinfo() replaces both gethostbyname() and getservbyname() 24
  • 25. getaddrinfo() Hostname is a hostname or an address string (dotted decimal string for IP). Service is a service name or a decimal port number string. 25
  • 26. struct addrinfo struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; li st! char *canonname; ed struct sockaddr *ai_addr; L ink struct addrinfo *ai_next; }; 26
  • 27. getaddrinfo() hints is an addrinfo * (can be NULL) that can contain: – ai_flags (AI_PASSIVE , AI_CANONNAME ) – ai_family (AF_XXX ) – ai_socktype (SOCK_XXX ) – ai_protocol (IPPROTO_TCP, etc.) 27
  • 28. getaddrinfo result is returned with the address of a pointer to an addrinfo structure that is the head of a linked list. It is possible to get multiple structures: – multiple addresses associated with the hostname. – The service is provided for multiple socket types. 28
  • 29. addrinfo usage ai_flags Used in call to socket() ai_family ai_socktype ai_protocol Used in call to bind(), connect() ai_addrlen or sendto() ai_canonname ai_addr ai_next ai_flags ai_family ai_socktype ai_protocol ai_addrlen ai_canonname ai_addr ai_next 29
  • 30. getnameinfo() int getnameinfo( const struct sockaddr *sockaddr, socklen_t addrlen char *host, size_t hostlen, char *serv, size_t servlen, int flags); getnameinfo() looks up a hostname and a service name given a sockaddr 30
  • 31. Out-of-Band Date • Ever been on a date, gone to a dance club and the band doesn't show up? – This is becoming a serious problem: • The number of Internet dating services is growing exponentially. • The number of bands is not growing. – RFC 90210 proposes some short term solutions (until the number of bands can be increased). 31
  • 32. Out-of-Band Data • TCP (and other transport layers) provide a mechanism for delivery of quot;high priorityquot; data ahead of quot;normal dataquot;. • We can almost think of this as 2 streams: normal data TCP PORT TCP PORT A B special data 32
  • 33. TCP OOB Data • TCP supports something like OOB data using URGENT MODE (a bit is send in a TCP segment header). • A TCP segment header field contains an indication of the location of the urgent data in the stream (the byte number). • The details are not important to us (we just want to see how to use this in our program). 33
  • 34. Sending OOB Data send(sd,buff,1,MSG_OOB); Can use send() to put a single byte of urgent data in a TCP stream. The TCP layer adds some segment header info to let the other end know there is some OOB data. The TCP layer on the receiving end treats the data marked as urgent in a special way. 34
  • 35. Receiving OOB Data • The TCP layer generates a SIGURG signal in the receiving process. • Select() will tell you an exception condition is present. • Depending on how things are set up: – the data can be read using recv() with a MSG_OOB flag set. – The data can be read inline and the receiving process can moniter the out-of-band-mark for the connection (using sockatmark()) 35
  • 36. So what? • OOB Data might be used: – a heartbeat between the client and server to detect early failure (example in the book). – A way to communicate an exceptional condition to a peer even when flow control has stopped the sender. 36
  • 37. Singles Driven IOU • Another problem with Internet Dating services is the lack of single drivers in many metropolitan areas. – Neither participant can pick up the other. – Dating protocols degrade to involve online communication only. – Proxy drivers (running TAXI protocol) get overloaded and refuse IOU packets. 37
  • 38. Signal Driven I/O • We can tell the kernel to send a SIGIO signal whenever something happens to a socket descriptor. • The signal handler must determine what conditions caused the signal and take appropriate action. 38
  • 39. Signal Driven UDP • SIGIO occurs whenever: – an incoming datagram arrives. – An asynchronous error occurs. • Could be ICMP error (unreachable, invalid address, etc). • Could allow process to handle other tasks and still watch for incoming UDP messages. 39
  • 40. Signal Driven TCP • SIGIO occurs whenever: – an incoming connection has completed. – Disconnect request initiated. – Disconnect request completed. – Half a connection shutdown. – Data has arrived. – Data has been sent (indicating there is buffer space) – asynchronous error 40