Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 07. Socket Options.

Similar presentations


Presentation on theme: "Chapter 07. Socket Options."— Presentation transcript:

1 Chapter 07. Socket Options

2 Understanding and practice of various socket options
Goal Understanding and practice of various socket options

3 Socket programming model
Overview (1/7) Socket programming model application TCP IP UDP IrDA Bluetooth ... socket Socket code Protocol implementation code

4 Two types of socket option
Overview (2/7) socket options Changing the basic operation of socket call Two types of socket option ① handling in socket code socket option is analyzed and proceeded in socket code ② handling in protocol implementation code socket option is analyzed and proceeded in protocol implementation code

5 Socket option setting Overview (3/7) int setsockopt ( SOCKET s,
int level, int optname, const char* optval, int optlen ) ; success: 0, fail: SOCKET_ERROR

6 Socket option getting Overview (4/7) int getsockopt ( SOCKET s,
int level, int optname, char* optval, int* optlen ) ; success: 0, fail: SOCKET_ERROR

7 Socket option - SOL_SOCKET
Overview (5/7) Socket option - SOL_SOCKET optname SO_BROADCAST SO_DONTROUTE SO_KEEPALIVE SO_LINGER SO_SNDBUF SO_RCVBUF SO_SNDTIMEO SO_RCVTIMEO SO_REUSEADDR optval type BOOL struct linger{} int get set description permit sending broadcast datagram No routing table reference in data transfer Checking connection status periodically Changing closesocket() property Setting socket send/receive buffer size Setting timeout for send(), recv() and so on Reuse of Local address(IP address, port number)

8 Socket option - IPPROTO_IP
Overview (6/7) Socket option - IPPROTO_IP optname IP_HDRINCL IP_TTL IP_MULTICAST_IF IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_ADD_MEMBERSHIP IP_DROP_MEMBERSHIP optval type BOOL int IN_ADDR{} struct ip_mreq{} get set description Including IP header in data sending Changing IP packet TTL(time-to-live) Setting interface to send multicast packet Changing TTL of multicast packet Setting of loop-back of multicast packet Join and leave multicast group

9 Socket option - IPPROTO_TCP
Overview (7/7) Socket option - IPPROTO_TCP optname optval type get set description TCP_NODELAY BOOL Stop Nagle algorithm in TCP

10 It is supported only for datagram sockets. Its default value is off.
SO_BROADCAST option Enables or disables the ability of a process to send broadcast messages. It is supported only for datagram sockets. Its default value is off.

11 SO_DONTROUTE option usage used by routing daemon to make sure a packet goes through a certain interface Code example BOOL optval = TRUE; if(setsockopt(listen_sock, SOL_SOCKET, SO_DONTROUTE, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

12 SO_KEEPALIVE option If set, this option is used for detecting peer host crashes. If this option is set and no data has been exchanged for 2 hours, then TCP sends keepalive probe to the peer. Cases: Peer responds with ACK. Another probe will be sent only after 2 hours of inactivity. Peer responds with RST (has crashed and rebooted). Error is set to ECONNRESET and the socket is closed. No response. 8 more probes are sent after which the socket’s pending error is set to ETIMEDOUT and the socket is closed. Code example BOOL optval = TRUE; if(setsockopt(listen_sock, SOL_SOCKET, SO_KEEPALIVE, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

13 l_onoff=0 : defualt behaviour
SO_LINGER option This option specifies how the close function operates for connection-oriented protocols struct linger { int l_onoff; /* Linger active */ int l_linger; /* How long to linger for */ }; l_onoff=0 : defualt behaviour l_onoff=1, l_linger=val : close returns only after val seconds, if socket is blocking l_onoff=1, l_linger=0 : RST sent on close

14 SO_SNDBUF, SO_RCVBUF option
usage send and receive buffer size Code example int optval; int optlen = sizeof(optval); if(getsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, (char *)&optval, &optlen) == SOCKET_ERROR) err_quit("getsockopt()"); printf(“receive buffer size = %d bytes \n", optval); optval *= 2; if(setsockopt(listen_sock, SOL_SOCKET, SO_RCVBUF, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) err_quit("setsockopt()");

15 SO_SNDTIMEO, SO_RCVTIMEO option
Usage Setting timeout for send(), recv(), sendto(), recvfrom(), etc Code example int optval = 3000; if(setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

16 SO_REUSEADDR option It allows a listening server to restart and bind its well known port even if previously established connections exist. It allows multiple instances of the same server to be started on the same port, as long as each instance binds a different local IP address. It allows a single process to bind the same port to multiple sockets, as long as each bind specifies a different local IP address. It allows completely duplicate bindings only for UDP sockets (broadcasting and multicasting).

17 Multicast address Features
multicasting (1/3) Multicast address Features Join and leave a multicast group , all group members are equal A member have to join a multicast group to receive multicast data A member don’t have to join a multicast group to send multicast data 28 bit Multicast group ID 1

18 Multicast data transfer (1)
multicasting (2/3) Multicast data transfer (1) A B Multicast group A B Multicast group

19 Multicast data transfer (2)
multicasting (3/3) Multicast data transfer (2) MulticastSender.cpp, Multicastreceiver.cpp A B C Multicast group

20 Socket options setsockopt() getsockopt() API support IP_MULTICAST_LOOP
yes IP_MULTICAST_TTL IP_MULTICAST_IF IP_ADD_MEMBERSHIP no IP_DROP_MEMBERSHIP Vinayak Jagtap, IP Broadcasting and Multicasting

21 IP_MULTICAST_IF option (1/2)
Usage Specify the interface for outgoing multicast datagrams sent on this socket Code example IN_ADDR localaddr; localaddr.s_addr = inet_addr(" "); if(setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, (char *)&localaddr, sizeof(localaddr)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

22 IP_MULTICAST_IF option (2/2)
Option setting result application

23 IP_MULTICAST_TTL option
Usage Set the IPv4 TTL parameter (if not specified, default=1) Code example // multicast TTL setting int ttl = 2; retval = setsockopt(sock, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&ttl, sizeof(ttl)); if(retval == SOCKET_ERROR) err_quit("setsockopt()");

24 IP_MULTICAST_LOOP option
Usage Enable or disable local loopback (default is enabled) Code example BOOL optval = FALSE; // no receiving the data sent if(setsockopt(sock, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

25 IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP option (1/3)
Usage Join/leave a multicast group on a specified local interface Option value #include <ws2tcpip.h> struct ip_mreq { struct in_addr imr_multiaddr; /* IP multicast address of group */ struct in_addr imr_interface; /* local IP address of interface */ };

26 IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP option (2/3)
Code example struct ip_mreq mreq; mreq.imr_multiaddr.s_addr = inet_addr(" "); mreq.imr_interface.s_addr = inet_addr(" "); if(setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mreq, sizeof(mreq)) == SOCKET_ERROR) { err_quit("setsockopt()"); }

27 IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP option (3/3)
Option setting result application

28 TCP_NODELAY option (1/2)
usage Used to enable/disable Nagle’s algorithm in TCP Nagle algorithm ① send the data when the size of the sending data becomes to MSS(maximum segment size) ② wait for the ACK of the previous data when the sending data size is less that. Once ACK is arrived, data is sent to peer side BOOL optval = TRUE; // Stop Nagle algorithm if(setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval)) == SOCKET_ERROR) { err_quit("setsockopt()"); }


Download ppt "Chapter 07. Socket Options."

Similar presentations


Ads by Google