Invited Speaker at the first "Deep into Smalltalk" spring school. 7-11 march 2011. The pdf of this slides is also available onlie at: http://car.mines-douai.fr/noury/docs/deepIntoSmalltalk2011
The (In)Security of Topology Discovery in Software Defined NetworksTalal Alharbi
Topology Discovery is an essential service in Soft-
ware Defined Networks (SDN). Most SDN controllers use a de-
facto standard topology discovery mechanism based on OpenFlow
to identify active links in the network. This paper discusses the
security, or rather lack thereof, of the current SDN topology
discovery mechanism, and its vulnerability to link spoofing
attacks. The feasibility and impact of the attacks are verified and
demonstrated via experiments. The paper presents and evaluates
a countermeasure based on HMAC authentication.
Invited Speaker at the first "Deep into Smalltalk" spring school. 7-11 march 2011. The pdf of this slides is also available onlie at: http://car.mines-douai.fr/noury/docs/deepIntoSmalltalk2011
The (In)Security of Topology Discovery in Software Defined NetworksTalal Alharbi
Topology Discovery is an essential service in Soft-
ware Defined Networks (SDN). Most SDN controllers use a de-
facto standard topology discovery mechanism based on OpenFlow
to identify active links in the network. This paper discusses the
security, or rather lack thereof, of the current SDN topology
discovery mechanism, and its vulnerability to link spoofing
attacks. The feasibility and impact of the attacks are verified and
demonstrated via experiments. The paper presents and evaluates
a countermeasure based on HMAC authentication.
AODV Improvement by Modification at Source Node and Securing It from Black Ho...IJERA Editor
MANETS suffer from constraints in power, storage and computational resources ,as a result, they are more
vulnerable to various communications security related attacks. therefore we attempt to focus on analyzing and
improving the security of routing protocol for MANETS viz. the Ad hoc On Demand Distance Vector
(AODV)routing protocol. We propose modifications to the AODV we propose an algorithm to counter the
Black hole attack on the routing protocols in MANETs. All the routes has unique sequence number and the
malicious node has the highest Destination Sequence number and it is the first RREP to arrive. So the
comparison is made only to the first entry in the table without checking other entries in the table
Scl : a Simple, Uniform and Operational Language for Component-Oriented Programming in Smalltalk. Luc Fabresse,
Christophe Dony, Marianne Huchard.
ESUG 2006, Prague
Optimization of Low-efficiency Traffic in OpenFlowSoftware Defined NetworksJose Saldana
This paper proposes a method for optimizing bandwidth usage in Software Defined Networks (SDNs) based on OpenFlow. Flows of small packets presenting a high overhead, as the ones generated by emerging services, can be identified by the SDN controller, in order to remove header fields that are common to any packet in the flow, only during their way through the SDN. At the same time, several packets can be multiplexed together in the same frame, thus reducing the number of sent frames. Four kinds of small-packet traffic flows are considered (VoIP, UDP and TCP-based online games, and ACKs from TCP flows). Both IPv4 and IPv6 are tested, and significant bandwidth savings (up to 68 % for IPv4 and 78 % for IPv6) can be obtained for the considered kinds of traffic.
Die monatlichen Anlässe in Zusammenarbeit mit dem Swiss IPv6 Council behandeln verschiedene technische Themenbereiche von IPv6.
Das Referat von Jen Linkova vom 30. November 2015 widmete sich dem Neighbor Discovery Protokoll, einem Schlüsselmechanismus um Verbindungen zwischen IPv6 Knotenpunkten und LANs aufzubauen. Die Referentin fokussierte sich in der Präsentation auf die technischen Details des Designs, der Implementierung sowie Sicherheitsaspekten.
Gerne stellen wir Ihnen die Präsentation zum Anschauen und Herunterladen zur Verfügung. Haben Sie Feedback zum Event? Wir sind gespannt auf Ihre Meinung.
AODV Improvement by Modification at Source Node and Securing It from Black Ho...IJERA Editor
MANETS suffer from constraints in power, storage and computational resources ,as a result, they are more
vulnerable to various communications security related attacks. therefore we attempt to focus on analyzing and
improving the security of routing protocol for MANETS viz. the Ad hoc On Demand Distance Vector
(AODV)routing protocol. We propose modifications to the AODV we propose an algorithm to counter the
Black hole attack on the routing protocols in MANETs. All the routes has unique sequence number and the
malicious node has the highest Destination Sequence number and it is the first RREP to arrive. So the
comparison is made only to the first entry in the table without checking other entries in the table
Scl : a Simple, Uniform and Operational Language for Component-Oriented Programming in Smalltalk. Luc Fabresse,
Christophe Dony, Marianne Huchard.
ESUG 2006, Prague
Optimization of Low-efficiency Traffic in OpenFlowSoftware Defined NetworksJose Saldana
This paper proposes a method for optimizing bandwidth usage in Software Defined Networks (SDNs) based on OpenFlow. Flows of small packets presenting a high overhead, as the ones generated by emerging services, can be identified by the SDN controller, in order to remove header fields that are common to any packet in the flow, only during their way through the SDN. At the same time, several packets can be multiplexed together in the same frame, thus reducing the number of sent frames. Four kinds of small-packet traffic flows are considered (VoIP, UDP and TCP-based online games, and ACKs from TCP flows). Both IPv4 and IPv6 are tested, and significant bandwidth savings (up to 68 % for IPv4 and 78 % for IPv6) can be obtained for the considered kinds of traffic.
Die monatlichen Anlässe in Zusammenarbeit mit dem Swiss IPv6 Council behandeln verschiedene technische Themenbereiche von IPv6.
Das Referat von Jen Linkova vom 30. November 2015 widmete sich dem Neighbor Discovery Protokoll, einem Schlüsselmechanismus um Verbindungen zwischen IPv6 Knotenpunkten und LANs aufzubauen. Die Referentin fokussierte sich in der Präsentation auf die technischen Details des Designs, der Implementierung sowie Sicherheitsaspekten.
Gerne stellen wir Ihnen die Präsentation zum Anschauen und Herunterladen zur Verfügung. Haben Sie Feedback zum Event? Wir sind gespannt auf Ihre Meinung.
The Presentation given at Guru Gobind Singh Polytechnic, Nashik for Third Year Information Technology and Computer Engineering Students on 08/02/2011.
Topic: Java Network Programming
When we desire a communication between two applications possibly running on different machines, we need sockets. This presentation aims to provide knowledge of basic socket programming to undergraduate students. Basically, this presentation gives the importance of socket in the area of networking and Unix Programming. The presentation of Topic (Sockets) has designed according to the Network Programming Subject, B.Tech, 6th Semester syllabus of Punjab Technical University Kapurthala, Punjab.
This presentation introduces basic concepts about the Java socket abstraction. These slides introduce the following concepts:
- What is a socket
- How to implement a client program
- How to implement a server program
The presentation is took from the Java course I run in the bachelor-level informatics curriculum at the University of Padova.
The presentation given at MSBTE sponsored content updating program on 'Advanced Java Programming' for Diploma Engineering teachers of Maharashtra. Venue: Guru Gobind Singh Polytechnic, Nashik
Date: 22/12/2010
Session: Java Network Programming
Can AI do good? at 'offtheCanvas' India HCI preludeAlan Dix
Invited talk at 'offtheCanvas' IndiaHCI prelude, 29th June 2024.
https://www.alandix.com/academic/talks/offtheCanvas-IndiaHCI2024/
The world is being changed fundamentally by AI and we are constantly faced with newspaper headlines about its harmful effects. However, there is also the potential to both ameliorate theses harms and use the new abilities of AI to transform society for the good. Can you make the difference?
EASY TUTORIAL OF HOW TO USE CAPCUT BY: FEBLESS HERNANEFebless Hernane
CapCut is an easy-to-use video editing app perfect for beginners. To start, download and open CapCut on your phone. Tap "New Project" and select the videos or photos you want to edit. You can trim clips by dragging the edges, add text by tapping "Text," and include music by selecting "Audio." Enhance your video with filters and effects from the "Effects" menu. When you're happy with your video, tap the export button to save and share it. CapCut makes video editing simple and fun for everyone!
Technoblade The Legacy of a Minecraft Legend.Techno Merch
Technoblade, born Alex on June 1, 1999, was a legendary Minecraft YouTuber known for his sharp wit and exceptional PvP skills. Starting his channel in 2013, he gained nearly 11 million subscribers. His private battle with metastatic sarcoma ended in June 2022, but his enduring legacy continues to inspire millions.
Hello everyone! I am thrilled to present my latest portfolio on LinkedIn, marking the culmination of my architectural journey thus far. Over the span of five years, I've been fortunate to acquire a wealth of knowledge under the guidance of esteemed professors and industry mentors. From rigorous academic pursuits to practical engagements, each experience has contributed to my growth and refinement as an architecture student. This portfolio not only showcases my projects but also underscores my attention to detail and to innovative architecture as a profession.
Book Formatting: Quality Control Checks for DesignersConfidence Ago
This presentation was made to help designers who work in publishing houses or format books for printing ensure quality.
Quality control is vital to every industry. This is why every department in a company need create a method they use in ensuring quality. This, perhaps, will not only improve the quality of products and bring errors to the barest minimum, but take it to a near perfect finish.
It is beyond a moot point that a good book will somewhat be judged by its cover, but the content of the book remains king. No matter how beautiful the cover, if the quality of writing or presentation is off, that will be a reason for readers not to come back to the book or recommend it.
So, this presentation points designers to some important things that may be missed by an editor that they could eventually discover and call the attention of the editor.
PDF SubmissionDigital Marketing Institute in NoidaPoojaSaini954651
https://www.safalta.com/online-digital-marketing/advance-digital-marketing-training-in-noidaTop Digital Marketing Institute in Noida: Boost Your Career Fast
[3:29 am, 30/05/2024] +91 83818 43552: Safalta Digital Marketing Institute in Noida also provides advanced classes for individuals seeking to develop their expertise and skills in this field. These classes, led by industry experts with vast experience, focus on specific aspects of digital marketing such as advanced SEO strategies, sophisticated content creation techniques, and data-driven analytics.
Top Israeli Products and Brands - Plan it israel.pdf
Sockets
1. sockets
Socket Programming in C/C++
c Mani Radhakrishnan and Jon Solworth
September 24, 2004
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
2. sockets
Contact Info
Mani Radhakrishnan
Office
4224 SEL
email
mradhakr @ cs . uic . edu
Office Hours
Tuesday 1 - 4 PM
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
3. TCP
sockets
UDP
Introduction
Sockets are a protocol independent method of creating a
connection between processes. Sockets can be either
connection based or connectionless: Is a connection
established before communication or does each packet
describe the destination?
packet based or streams based: Are there message boundaries
or is it one stream?
reliable or unreliable. Can messages be lost, duplicated,
reordered, or corrupted?
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
4. TCP
sockets
UDP
Socket characteristics
Socket are characterized by their domain, type and transport
protocol. Common domains are:
AF UNIX: address format is UNIX pathname
AF INET: address format is host and port number
Common types are:
virtual circuit: received in order transmitted and reliably
datagram: arbitrary order, unreliable
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
5. TCP
sockets
UDP
Socket characteristics (cont’d)
Each socket type has one or more protocols. Ex:
TCP/IP (virtual circuits)
UDP (datagram)
Use of sockets:
Connection–based sockets communicate client-server: the
server waits for a connection from the client
Connectionless sockets are peer-to-peer: each process is
symmetric.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
6. TCP
sockets
UDP
Socket APIs
socket: creates a socket of a given domain, type, protocol
(buy a phone)
bind: assigns a name to the socket (get a telephone number)
listen: specifies the number of pending connections that
can be queued for a server socket. (call waiting allowance)
accept: server accepts a connection request from a client
(answer phone)
connect: client requests a connection request to a server
(call)
send, sendto: write to connection (speak)
recv, recvfrom: read from connection (listen)
shutdown: end the call
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
7. TCP
sockets
UDP
Connection-based communication
Server performs the following actions
socket: create the socket
bind: give the address of the socket on the server
listen: specifies the maximum number of connection
requests that can be pending for this process
accept: establish the connection with a specific client
send,recv: stream-based equivalents of read and write
(repeated)
shutdown: end reading or writing
close: release kernel data structures
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
8. TCP
sockets
UDP
TCP client
Client performs the following actions
socket: create the socket
connect: connect to a server
send,recv: (repeated)
shutdown
close
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
9. TCP
sockets
UDP
TCP-based sockets
server client
socket socket
bind connect
listen
accept close
send/recv send/recv
shutdown shutdown
close close
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
10. TCP
sockets
UDP
socket API
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t s o c k e t ( i n t domain , i n t t y p e , i n t p r o t o c o l ) ;
Returns a file descriptor (called a socket ID) if successful, -1
otherwise. Note that the socket returns a socket descriptor which
is the same as a file descriptor.
The domain is AF INET.
The type argument can be:
SOCK STREAM: Establishes a virtual circuit for stream
SOCK DGRAM: Establishes a datagram for communication
SOCK SEQPACKET: Establishes a reliable, connection based,
two way communication with maximum message size. (This is
not available on most machines.)
protocol is usually zero, so that type defines the connection
within domain.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
11. TCP
sockets
UDP
bind
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t bind ( i n t sid , s t r u c t sockaddr ∗addrPtr , i n t l e n )
Where
sid: is the socket id
addrPtr: is a pointer to the address family dependent
address structure
len: is the size of *addrPtr
Associates a socket id with an address to which other processes
can connect. In internet protocol the address is [ipNumber,
portNumber]
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
12. TCP
sockets
UDP
sockaddr
For the internet family:
struct sockaddr in {
2 sa family t s i n f a m i l y ; // = AF INET
in port t sin port ; // i s a p o r t number
4 struct in addr sin addr ; // an I P a d d r e s s
}
For unix sockets (only works between processes on the same
machine)
struct sockaddr un {
2 uint8 t sun length ; //
short sun family ; // = AF LOCAL
4 char sun path [ 1 0 0 ] ; // n u l l t e r m i n a t e d pathname
// ( 1 0 0 i s p o s i x 1 . g minimum )
6 }
When using internet sockets, the second parameter of bind (of
type sockaddr in *) must be cast to (sockaddr *).
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
13. TCP
sockets
UDP
listen
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 int l i s t e n ( int sid , int size );
Where size it the number of pending connection requests allowed
(typically limited by Unix kernels to 5).
Returns the 0 on success, or -1 if failure.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
14. TCP
sockets
UDP
accept
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t accept ( i n t sid , s t r u c t sockaddr ∗addrPtr , i n t ∗ l e n P t r )
Returns the socketId and address of client connecting to socket.
if lenPtr or addrPtr equal zero, no address structure is returned.
lenPtr is the maximum size of address structure that can be
called, returns the actual value.
Waits for an incoming request, and when received creates a socket
for it.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
15. TCP
sockets
UDP
accept styles
There are basically three styles of using accept:
Iterating server: Only one socket is opened at a time. When the
processing on that connection is completed, the
socket is closed, and next connection can be
accepted.
Forking server: After an accept, a child process is forked off to
handle the connection. Variation: the child processes
are preforked and are passed the socketId.
Concurrent single server: use select to simultaneously wait on all
open socketIds, and waking up the process only when
new data arrives.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
16. TCP
sockets
UDP
Pro and Con of Accept styles
Iterating server is basically a low performance technique since
only one connection is open at a time.
Forking servers enable using multiple processors. But they
make sharing state difficult, unless performed with threads.
Threads, however present a very fragile programming
environment.
Concurrent single server: reduces context switches relative to
forking processes and complexity relative to threads. But does
not benefit from multiprocessors.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
17. TCP
sockets
UDP
send
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t send ( i n t sid , const char ∗ b u f f e r P t r ,
i n t len , i n t f l a g )
Send a message. Returns the number of bytes sent or -1 if failure.
(Must be a bound socket).
flag is either
0: default
MSG OOB: Out-of-band high priority communication
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
18. TCP
sockets
UDP
recv
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t recv ( i n t sid , char ∗ b u f f e r P t r ,
i n t len , i n t f l a g s )
Receive up to len bytes in bufferPtr. Returns the number of
bytes received or -1 on failure.
flags can be either
0: default
MSG OOB: out-of-bound message
MSG PEEK: look at message without removing
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
19. TCP
sockets
UDP
shutdown
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t shutdown ( i n t s i d , i n t how )
Disables sending (how=1 or how=2) or receiving (how=0 or
how=2). Returns -1 on failure.
acts as a partial close.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
20. TCP
sockets
UDP
connect
this is the first of the client calls
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t connect ( i n t sid , s t r u c t sockaddr ∗addrPtr , i n t l e n )
Specifies the destination to form a connection with (addrPtr), and
returns a 0 if successful, -1 otherwise.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
21. TCP
sockets
UDP
Denoting Connections
Note that a connection is denoted by a 5-tuple:
from IP
from port
protocol
to IP
to port
So that multiple connections can share the same IP and port.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
22. TCP
sockets
UDP
Port usage
Note that the initiator of communications needs a fixed port to
target communications.
This means that some ports must be reserved for these “well
known” ports.
Port usage:
0-1023: These ports can only be binded to by root
1024-5000: well known ports
5001-64K-1: ephemeral ports
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
23. TCP
sockets
UDP
APIs for managing names and IP addresses
We next consider a number of auxiliary APIs:
The hostent structure: describes IP, hostname pairs
gethostbyname: hostent of a specified machine
htons, htonl, ntohs, ntohl: byte ordering
inet pton, inet ntop: conversion of IP numbers between
presentation and strings
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
24. TCP
sockets
UDP
gethostname
#i n c l u d e <u n i s t d . h>
2
i n t g e t h o s t n a m e ( c h a r ∗hostname , s i z e t nameLength )
Returns the hostname of the machine on which this command
executes (What host am i?). Returns -1 on failure, 0 on success.
MAXHOSTNAMELEN is defined in <sys/param.h>.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
25. TCP
sockets
UDP
hostent structure
struct hostent {
2 c h a r ∗h name ; // o f f i c i a l ( c a n o n i c a l ) name o f t h e h o s t
c h a r ∗∗ h a l i a s e s ; // n u l l t e r m i n a t e d a r r a y of a l t e r n a t i v e hostnames
4 int h addrtype ; // h o s t a d d r e s s t y p e AF INET o r AF INET6
int h length ; // 4 o r 16 b y t e s
6 c h a r ∗∗ h a d d r l i s t ; // IPv4 or IPv6 l i s t of a d d r e s s e s
}
Error is return through h error which can be:
HOST NOT FOUND
TRY AGAIN
NO RECOVERY
NO DATA
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
26. TCP
sockets
UDP
Gethostbyname
Auxiliary functions
#i n c l u d e <n e t d b . h>
2
s t r u c t h o s t e n t ∗ g e t h o s t b y n a m e ( c o n s t c h a r ∗hostname )
Translates a DNS name into a hostent.
Example:
struct hostent ∗hostEntity =
2 g e t h o s t b y n a m e ( ” b e r t . c s . u i c . edu ” ) ;
memcpy ( s o c k e t A d d r− i n a d d r ,
>s
4 hostEntity− >h a d d r l i s t [ 0 ] ,
hostEntity− >h l e n g t h ) ;
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
27. TCP
sockets
UDP
Network byte ordering
Network ordering in big endian. (Sparc is big endian, Intel is little
endian).
// Host t o n e t w o r k b y t e o r d e r f o r s h o r t s ( 1 6 b i t )
2 u i n t 1 6 t htons ( u i n t 1 6 t v ) ;
4 // Host t o n e t w o r k b y t e o r d e r f o r long (32 b i t )
uint 32t htonl ( uint 32t v );
6
// Network t o h o s t b y t e o r d e r f o r long (16 b i t )
8 u i n t 1 6 t ntohs ( u i n t 1 6 t v );
10 // Network t o h o s t b y t e o r d e r f o r l o n g ( 3 2 b i t )
uint 32t ntohl ( uint 32t v );
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
28. TCP
sockets
UDP
IP Number translation
IP address strings to 32 bit number
In what follows, ’p’ stands for presentation.
Hence, these routines translate between the address as a string and
the address as the number.
Hence, we have 4 representations:
IP number in host order
IP number in network order
Presentation (eg. dotted decimal)
Fully qualified domain name
Only the last needs an outside lookup to convert to one of the
other formats.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
29. TCP
sockets
UDP
inet pton
#i n c l u d e <a r p a / i n e t . h>
2
i n t i n e t p t o n ( i n t family , const char ∗strPtr ,
4 void ∗addrPtr ) ;
returns 1 if OK, 0 if presentation error, -1 error
Where family is either AF INET or AF INET6.
The strPtr is the IP address as a dotted string.
Finally, addrPtr points to either the 32 bit result (AF INET) or
128 bit result (AF INET6).
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
30. TCP
sockets
UDP
inet ntop
#i n c l u d e <a r p a / i n e t . h>
2
i n t i n e t n t o p ( i n t family , const char ∗addrPtr ,
4 char ∗s tr Pt r , s i z e t l e n ) ;
returns 1 if OK, 0 if presentation error, -1 error
Where family is either AF INET or AF INET6.
The strPtr is the return IP address as a dotted string.
Finally, addrPtr points to either the 32 bit (AF INET) or 128 bit
(AF INET6).
Length is the size of destination.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
31. TCP
sockets
UDP
Example: TCP/IP Server Code
Without error checking.
sockaddr in serverAddr ;
2 s o c k a d d r &s e r v e r A d d r C a s t = ( s o c k a d d r &) s e r v e r A d d r ;
4 // g e t a t c p / i p s o c k e t
i n t l i s t e n F d = s o c k e t ( AF INET , SOCK STREAM , 0 ) ;
6
b z e r o (& s e r v e r A d d r , s i z e o f ( s e r v e r A d d r ) ) ;
8 s e r v e r A d d r . s i n f a m i l y = AF INET ;
// any i n t e r n e t i n t e r f a c e on t h i s s e r v e r .
10 s e r v e r A d d r . s i n a d d r . s a d d r = h t o n l (INADDR ANY ) ;
serverAddr . s i n p o r t = htons ( 1 3 ) ;
12
b i n d ( l i s t e n F d , &s e r v e r A d d r C a s t , s i z e o f ( s e r v e r A d d r ) ) ;
14
l i s t e n ( listenFd , 5);
16
for ( ; ; ) {
18 i n t connectFd =
a c c e p t ( l i s t e n F d , ( s o c k a d d r ∗) NULL , NULL ) ;
20 // . . r e a d and w r i t e o p e r a t i o n s on c o n n e c t F d . .
shutdown ( c o n n e c t F d , 2 ) ;
22 c l o s e ( connectFd ) ;
}
Note that the above is an iterative server, which means that it
serves one connection at a time.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
32. TCP
sockets
UDP
Concurrent Server
To build a concurrent server:
a fork is performed after the accept.
The child process closes listenFd, and communicates using
connectFd.
The parent process closses connectFd, and then loops back to
the accept to wait for another connection request.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
33. TCP
sockets
UDP
Example: TCP/IP Client code
sockaddr in serverAddr ;
2 s o c k a d d r &s e r v e r A d d r C a s t = ( s o c k a d d r &) s e r v e r A d d r ;
4 // g e t a t c p / i p s o c k e t
i n t s o c k F d = s o c k e t ( AF INET , SOCK STREAM , 0 ) ;
6
b z e r o (& s e r v e r A d d r , s i z e o f ( s e r v e r A d d r ) ) ;
8 s e r v e r A d d r . s i n f a m i l y = AF INET ;
// h o s t I P # i n d o t t e d d e c i m a l f o r m a t !
10 i n e t p t o n ( AF INET , s e r v e r N a m e , s e r v e r A d d r . s i n a d d r ) ;
serverAddr . s i n p o r t = htons ( 1 3 ) ;
12
c o n n e c t ( sockFd , s e r v e r A d d r C a s t , s i z e o f ( s e r v e r A d d r ) ) ;
14 // . . r e a d and w r i t e o p e r a t i o n s on s o c k F d . .
shutdown ( sockFd , 2 ) ;
16 c l o s e ( s o c k F d ) ;
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
34. TCP
sockets
UDP
Connectionless communication
Communication is symmetric (peer-to-peer)
socket
bind: bind is optional for initiator
sendto, recvfrom (repeated)
shutdown
close
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
35. TCP
sockets
UDP
Connectionless communication
client
socket
bind
sendto/
recvfrom
shutdown
close
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
36. TCP
sockets
UDP
UDP variations
It is not necessary for both sockets to bind
The receiver gets the address of the sender
It is possible for a UDP socket to connect
In this case, send/recv (or write/read) must be used instead
of sendto/recvfrom.
Asynchronous errors can be returned (using ICMP)
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
37. TCP
sockets
UDP
sendto
for connectionless protocols
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 i n t sendto ( i n t sid , const void ∗bufferPtr ,
s i z e t bufferLength , int flag ,
6 s t r u c t sockaddr ∗addrPtr , s o c k l e n t addrLength )
Send a buffer, bufferPtr, of length bufferLength to address
specified by addrPtr of size addrLength. Returns number of
bytes sent or -1 on error.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
38. TCP
sockets
UDP
recvfrom
for connectionless protocols
#i n c l u d e <s y s / t y p e s . h>
2 #i n c l u d e <s y s / s o c k e t . h>
4 int recvfrom ( int sid , void ∗bufferPtr , int bufferLength ,
i n t f l a g , sockaddr ∗addrPtr , i n t ∗addrLengthPtr )
Receive a buffer in bufferPtr of maximum length bufferLength
from an unspecified sender.
Sender address returned in addrPtr, of size *addrLengthPtr.
Returns number of bytes receive or -1 on error.
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
39. TCP
sockets
UDP
Example: UDP—server
i n t s o c k e t I d = s o c k e t ( AF INET , SOCK DGRAM, 0 ) ;
2
sockaddr in serverAddr , clientAddr ;
4 s o c k a d d r &s e r v e r A d d r C a s t = ( s o c k a d d r &) s e r v e r A d d r ;
s o c k a d d r &c l i e n t A d d r C a s t = ( s o c k a d d r &) c l i e n t A d d r ;
6
// a l l o w c o n n e c t i o n t o any a d d r on h o s t
8 // f o r h o s t s w i t h m u l t i p l e n e t w o r k c o n n e c t i o n s
// and a s t s e r v e r p o r t .
10 s e r v e r A d d r . s i n f a m i l y = AF INET ;
serverAddr . sin port = htons ( s e r v e r P o r t ) ;
12 s e r v e r A d d r . s i n a d d r . s a d d r = INADDR ANY ;
14 // a s s o c i a t e p r o c e s s w i t h p o r t
b i n d ( s o c k e t I d , &s e r v e r A d d r C a s t , s i z e o f ( a d d r ) ) ;
16
// r e c e i v e from a c l i e n t
18 int size = sizeof ( clientAddr );
recvfrom ( socketId , buffer , bufferSize ,
20 0 , c l i e n t A d d r C a s t , &s i z e ) ;
22 // r e p l y t o t h e c l i e n t j u s t r e c e i v e d from
sendto ( socketId , buffer , bufferSize ,
24 0 , clientAddrCast , size );
26 close ( socketId );
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++
40. TCP
sockets
UDP
Example: UDP—client
i n t s o c k e t I d = s o c k e t ( AF INET , SOCK DGRAM, 0 ) ;
2
sockaddr in serverAddr , clientAddr ;
4 s o c k a d d r &s e r v e r A d d r C a s t = ( s o c k a d d r &) s e r v e r A d d r ;
s o c k a d d r &c l i e n t A d d r C a s t = ( s o c k a d d r &) c l i e n t A d d r ;
6
// s p e c i f y s e r v e r a d d r e s s , p o r t
8 s e r v e r A d d r . s i n f a m i l y = AF INET ;
serverAddr . sin port = htons ( s e r v e r P o r t ) ;
10 s t r u c t h o s t e n t ∗hp = g e t h o s t b y n a m e ( hostName ) ;
memcpy ( ( c h a r ∗)& s e r v e r A d d r . s i n a d d r ,
12 ( c h a r ∗) hp− >h a d d r , hp− >h l e n g t h ) ;
14 // no n e e d t o b i n d i f n o t p e e r−to−p e e r
int size = sizeof ( serverAddr );
16 sendto ( socketId , buffer , bufferSize , 0 ,
serverAddrCast , s i z e ) ;
18
recvfrom ( socketId , buffer , bufferSize , 0 ,
20 s e r v e r A d d rC a s t , &s i z e ) ;
22 close ( socketId );
c Mani Radhakrishnan and Jon Solworth Socket Programming in C/C++