Socket Options - PowerPoint PPT Presentation

1 / 50
About This Presentation
Title:

Socket Options

Description:

Title: Network Programming Author: Dave Hollinger Last modified by: haribabu Created Date: 3/31/1996 9:02:14 PM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:64
Avg rating:3.0/5.0
Slides: 51
Provided by: DaveH173
Category:
Tags: options | signal | socket

less

Transcript and Presenter's Notes

Title: Socket Options


1
Socket Options
2
abstraction
  • Introduction
  • getsockopt and setsockopt function
  • socket state
  • Generic socket option
  • IPv4 socket option
  • ICMPv6 socket option
  • IPv6 socket option
  • TCP socket option
  • fcnl function

3
Introduction
  • Three ways to get and set the socket option that
    affect a socket
  • getsockopt , setsockopt functiongtIPv4 and IPv6
    multicasting options
  • fcntl function gtnonblocking I/O, signal driven
    I/O
  • ioctl function gtchapter16

4
getsockopt and setsockopt function
  • include ltsys/socket.hgt
  • int getsockopt(int sockfd, , int level, int
    optname, void optval, socklent_t optlen)
  • int setsockopt(int sockfd, int level , int
    optname, const void optval, socklent_t optlen)
  • sockfd gt open socket descriptor
  • level gt code in the system to interprete the
    option(generic, IPv4, IPv6, TCP)
  • optval gt pointer to a variable from which the
    new value of option is fetched by setsockopt, or
    into which the current value of the option is
    stored by setsockopt.
  • optlen gt the size of the option variable.

5
Generic socket option
  • SO_BROCAST gtenable or disable the ability of the
    process to send broadcast message.(only datagram
    socket Ethernet, token ring..)
  • SO_DEBUG gtkernel keep track of detailed
    information about all packets sent or received by
    TCP(only supported by TCP)
  • SO_DONTROUTEgtoutgoing packets are to bypass the
    normal routing mechanisms of the underlying
    protocol.
  • SO_ERRORgtwhen error occurs on a socket, the
    protocol module in a Berkeley-derived kernel sets
    a variable named so_error for that socket.
    Process can obtain the value of so_error by
    fetching the SO_ERROR socket option

6
SO_KEEPALIVE
  • SO_KEEPALIVEgtwait 2hours, and then TCP
    automatically sends a keepalive probe to the
    peer.
  • Peer response
  • ACK(everything OK)
  • RST(peer crashed and rebooted)ECONNRESET
  • no responseETIMEOUT gtsocket closed
  • example Rlogin, Telnet
  • Normally used by servers

7
SO_LINGER
  • SO_LINGER gtspecify how the close function
    operates for a connection-oriented
    protocol(defaultclose returns immediately)
  • struct linger
  • int l_onoff / 0 off, nonzero on
    /
  • int l_linger /linger time second/
  • l_onoff 0 turn off , l_linger is ignored
  • l_onoff nonzero and l_linger is 0TCP abort
    the connection (send RST), discard any remaining
    data in send buffer.
  • l_onoff nonzero and l_linger is nonzero
    process wait until remained data sending, or
    until linger time expired. If socket has been set
    nonblocking it will not wait for the close to
    complete, even if linger time is nonzero.

8
SO_LINGER
client
server
write
data
Data queued by TCP
Close close returns
FIN
Ack of data and FIN
Application reads queued data and FIN close
FIN
Ack of data and FIN
Default operation of closeit returns immediately
9
SO_LINGER
client
server
write
data
Data queued by TCP
Close
FIN
Ack of data and FIN
close returns
Application reads queued data and FIN close
FIN
Ack of data and FIN
Close with SO_LINGER socket option set and
l_linger a positive value
10
SO_LINGER
client
server
write
data
Data queued by TCP
Shutdown read block
FIN
Ack of data and FIN
Application reads queued data and FIN close
FIN
read returns 0
Ack of data and FIN
Using shutdown to know that peer has received our
data
11
  • An way to know that the peer application has read
    the data
  • use an application-level ack or application ACK
  • client
  • char ack
  • Write(sockfd, data, nbytes) // data from client
    to server
  • nRead(sockfd, ack, 1) // wait for
    application-level ack
  • server
  • nbytesRead(sockfd, buff, sizeof(buff)) //data
    from client
  • //server verifies it received the correct amount
    of data from
  • // the client
  • Write(sockfd, , 1)//servers ACK back to client

12
(No Transcript)
13
(No Transcript)
14
SO_RCVBUF , SO_SNDBUF
  • let us change the default send-buffer,
    receive-buffer size.
  • Default TCP send and receive buffer size
  • 4096bytes
  • 8192-61440 bytes
  • Default UDP buffer size 9000bytes, 40000 bytes
  • SO_RCVBUF option must be setting before
    connection established.
  • For client, it should be before calling connect()
  • For server it should be before calling listen()
  • TCP socket buffer size should be at least three
    times the MSSs

15
SO_RCVLOWAT , SO_SNDLOWAT
  • Every socket has a receive low-water mark and
    send low-water mark.(used by select function)
  • Receive low-water mark
  • the amount of data that must be in the socket
    receive buffer for select to return readable.
  • Default receive low-water mark 1 for TCP and
    UDP
  • Send low-water mark
  • the amount of available space that must exist in
    the socket send buffer for select to return
    writable
  • Default send low-water mark 2048 for TCP
  • UDP send buffer never change because dose not
    keep a copy of send datagram.

16
SO_RCVTIMEO, SO_SNDTIMEO
  • allow us to place a timeout on socket receives
    and sends.
  • Default disabled

17
SO_REUSEADDR, SO_REUSEPORT
  • Allow a listening server to start and bind its
    well known port even if previously established
    connection exist that use this port as their
    local port.
  • Allow multiple instance of the same server to be
    started on the same port, as long as each
    instance binds a different local IP address.
  • Allow a single process to bind the same port to
    multiple sockets, as long as each bind specifies
    a different local IP address.
  • Allow completely duplicate bindings multicasting

18
SO_TYPE
  • Return the socket type.
  • Returned value is such as SOCK_STREAM,
    SOCK_DGRAM...

19
SO_USELOOPBACK
  • This option applies only to sockets in the
    routing domain(AF_ROUTE).
  • The socket receives a copy of everything sent on
    the socket.

20
IPv4 socket option
  • Level gt IPPROTO_IP
  • IP_HDRINCL gt If this option is set for a raw IP
    socket, we must build our IP header for all the
    datagrams that we send on the raw socket.

21
IPv4 socket option
  • IP_OPTIONSgtallows us to set IP option in IPv4
    header.(chapter 24)
  • IP_RECVDSTADDRgtThis socket option causes the
    destination IP address of a received UDP datagram
    to be returned as ancillary data by
    recvmsg.(chapter20)

22
IP_RECVIF
  • Cause the index of the interface on which a UDP
    datagram is received to be returned as ancillary
    data by recvmsg.(chapter20)

23
IP_TOS
  • lets us set the type-of-service(TOS) field in IP
    header for a TCP or UDP socket.
  • If we call getsockopt for this option, the
    current value that would be placed into the
    TOS(type of service) field in the IP header is
    returned

24
IP_TTL
  • We can set and fetch the default TTL(time to live
    field).

25
ICMPv6 socket option
  • This socket option is processed by ICMPv6 and has
    a level of IPPROTO_ICMPV6.
  • ICMP6_FILTER gtlets us fetch and set an
    icmp6_filter structure that specifies which of
    the 256possible ICMPv6 message types are passed
    to the process on a raw socket.(chapter 25)

26
IPv6 socket option
  • This socket option is processed by IPv6 and have
    a level of IPPROTO_IPV6.
  • IPV6_ADDRFORMgtallow a socket to be converted
    from IPv4 to IPv6 or vice versa.(chapter 10)
  • IPV6_CHECKSUMgtspecifies the byte offset into the
    user data of where the checksum field is located.

27
IPV6_DSTOPTS
  • Specifies that any received IPv6 destination
    options are to be returned as ancillary data by
    recvmsg.

28
IPV6_HOPLIMIT
  • Setting this option specifies that the received
    hop limit field be returned as ancillary data by
    recvmsg.(chapter 20)
  • Default off.

29
IPV6_HOPOPTS
  • Setting this option specifies that any received
    IPv6 hop-by-hop option are to be returned as
    ancillary data by recvmsg.(chapter 24)

30
IPV6_NEXTHOP
  • This is not a socket option but the type of an
    ancillary data object that can be specified to
    sendmsg. This object specifies the next-hop
    address for a datagram as a socket address
    structure.(chapter20)

31
IPV6_PKTINFO
  • Setting this option specifies that the following
    two pieces of infoemation about a received IPv6
    datagram are to be returned as ancillary data by
    recvmsgthe destination IPv6 address and the
    arriving interface index.(chapter 20)

32
IPV6_PKTOPTIONS
  • Most of the IPv6 socket options assume a UDP
    socket with the information being passed between
    the kernel and the application using ancillary
    data with recvmsg and sendmsg.
  • A TCP socket fetch and store these values using
    IPV6_ PKTOPTIONS socket option.

33
IPV6_RTHDR
  • Setting this option specifies that a received
    IPv6 routing header is to be returned as
    ancillary data by recvmsg.(chapter 24)
  • Default off

34
IPV6_UNICAST_HOPS
  • This is similar to the IPv4 IP_TTL.
  • Specifies the default hop limit for outgoing
    datagram sent on the socket, while fetching the
    socket option returns the value for the hop limit
    that the kernel will use for the socket.

35
TCP socket option
  • There are five socket option for TCP, but three
    are new with Posix.1g and not widely supported.
  • Specify the level as IPPROTO_TCP.

36
TCP_KEEPALIVE
  • This is new with Posix.1g
  • It specifies the idle time in second for the
    connection before TCP starts sending keepalive
    probe.
  • Default 2hours
  • this option is effective only when the
    SO_KEEPALIVE socket option enabled.

37
TCP_MAXRT
  • This is new with Posix.1g.
  • It specifies the amount of time in seconds before
    a connection is broken once TCP starts
    retransmitting data.
  • 0 use default
  • -1retransmit forever
  • positive valuerounded up to next transmission
    time

38
TCP_MAXSEG
  • This allows us to fetch or set the maximum
    segment size(MSS) for TCP connection.

39
TCP_NODELAY
  • This option disables TCPs Nagle algorithm.
  • (default this algorithm enabled)
  • purpose of the Nagle algorithm.
  • gtprevent a connection from having multiple
    small packets outstanding at any time.
  • Small packet gt any packet smaller than MSS.

40
Nagle algorithm
  • Default enabled.
  • Reduce the number of small packet on the WAN.
  • If given connection has outstanding data , then
    no small packet data will be sent on connection
    until the existing data is acknowledged.

41
Nagle algorithm disabled
h
0
250
e
500
l
750
l
1000
o
1250
!
1500
1500
1750
2000
42
Nagle algorithm enabled
h
h
0
250
e
500
l
el
750
l
1000
o
1250
!
lo
1500
1500
1750
!
2000
2250
2500
43
fcntl function
  • File control
  • This function perform various descriptor control
    operation.
  • Provide the following features
  • Nonblocking I/O(chapter 15)
  • signal-driven I/O(chapter 22)
  • set socket owner to receive SIGIO signal.
  • (chapter 21,22)

44
  • include ltfcntl.hgt
  • int fcntl(int fd, int cmd, ./ int arg /)
  • Returnsdepends on cmd if
    OK, -1 on error
  • O_NONBLOCK nonblocking I/O
  • O_ASYNC signal driven I/O
    notification

45
Nonblocking I/O using fcntl
  • Int flags
  • / set socket nonblocking /
  • if((flags fcntl(fd, f_GETFL, 0)) lt 0)
  • err_sys(F_GETFL error)
  • flags O_NONBLOCK
  • if(fcntl(fd, F_SETFL, flags) lt 0)
  • err_sys(F_ SETFL error)

each descriptor has a set of file flags that
fetched with the F_GETFL command and set with
F_SETFL command.
46
Misuse of fcntl
  • / wrong way to set socket nonblocking /
  • if(fcntl(fd, F_SETFL,O_NONBLOCK) lt 0)
  • err_sys(F_ SETFL error)
  • / because it also clears all the other file
    status flags./

47
Turn off the nonblocking flag
  • Flags O_NONBLOCK
  • if(fcntl(fd, F_SETFL, flags) lt 0)
  • err_sys(F_SETFL error)

48
F_SETOWN
  • The integer arg value can be either
    positive(process ID) or negative (group ID)value
    to receive the signal.
  • F_GETOWN gt retrurn the socket owner by fcntl
    function, either process ID or process group ID.

49
(No Transcript)
50
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com