• Socket options: a summary options can be examined and sometimes modified.

advertisement
• 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
Download