• 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