70 likes | 100 Views
Learn about socket options in TCP, IP, and general sockets. Discover how to examine and modify options using getsockopt and setsockopt routines. Examples include buffer sizes, low/high watermarks, UDP broadcasting, TCP keep-alive timer, and IP options such as source routing, TTL, QoS, and multicast options.
E N D
Socket options: a summary • Tcp options, ip options and general socket options can be examined and sometimes modified. • getsockopt, setsockopt routines • Some examples: • Socket (TCP/UDP) send/receive buffer size • Socket (TCP/UDP) send/receive low/high watermark • UDP broadcasting • TCP keep alive timer • IP options: e.g. source routing • IP Time to live (TTL) • IP quality of service (TOS) • IP multicast options
#include <sys/socket.h> int getsockopt (int sockfd, int level, int optname, void *optval, socklen_t *optlen); Int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); • Level includes general socket option (SOL_SOCKET) and protocol-specific option (IP, TCP, etc). • Option value can be of different types : int, in_addr, timeval, … ---- that is why we use the void pointer.
General socket options (level = SOL_SOCKET) • Optnames: • SO_BROADCAST(int): permit sending broadcast datagram • SO_DEBUG: for debugging purpose • SO_DONROUTE: used by routing daemon to make sure a packet goes through a certain interface. • SO_ERROR: can only be got (not set), reset the error • SO_KEEPALIVE: for TCP only, automatic send keepalive message when inactive for 2 hours (can be modified). • SO_LINGER: for TCP only, determines the behavior when a close is called. • SO_OOBINLINE: put out of band data in the normal input queue. • SO_RCVBUF, SO_SNDBUF: send and receive buffer size.
General socket options (level = SOL_SOCKET) • Optnames: • SO_RCVLOWAT, SO_SENDLOWAT: low watermark – affect the select system call • SO_RCVTIMEO, SO_SNDTIMEO: inherent timeout time (disable by default) • SO_REUSEADDR: Allows the port to be reused – all server should do this to restart immediately • SO_TYPE: socket type? SOCK_STREAM and SOCK_DGRAM. • SO_USELOOPBACK: sending socket gets a copy?
IP options: • Allows packets sent through a socket to have certain behavior, e.g source routing • Level = IPPROTO_IP • Example optnames: (manipulating IP header fields) • IP_HDRINCL: who builds the IP header (raw socket). • IP_OPTIONS: setting IP optional header fields • IP_TOS • IP_TTL
IP options: • Level = IPPROTO_IP • Optnames: (IP MULTICAST related) • IP_MULTICAST_IF • IP_MULTICAST_TTL • IP_MULTICAST_LOOP • IP_ADD_MEMBERSHIP • IP_DROP_MEMBERSHIP
TCP options: • Level = IPPROTO_TCP • Optnames: • TCP_KEEPALIVE: set the time • TCP_MAXRT: maximum retransmission time • TCP_MAXSEG: maximum segment size • TCP_NODELAY: wait to ack or not (enable) • See example5.c