套接字选项
套接字选项
套接字选项是我们网络编程中很重要的一点,有很多方式去设置或者查看一个socket的选项
- getsocketopt / setsocketopt
- fcntl
- ioctl
ip套接字选项图
tcp套接字选项
特殊套接字选项
有些套接字选项也不是所有的可以直接设置或者查看的,有些选项是需要相应的时机我们才能设置。比如 tcp 的已连接节点(必须得成功完成三次握手的socket)的一些选项
- SO_DEBUG
- SO_DONTROUTE
- SO_SNDBUF
- SO_RECVBUF
- SO_SNDLOWAT (udp/tcp默认为2048)
- SO_RECVLOWAT(udp/tcp默认为1)
- TCP_MAXSEG
- TCP_NODELAY(不开启nagle算法,nagle算法为了避免拥塞,让小块数据一起发送,而不一个一个发送)
- SO_KEEPALIVE(设置后可定期的以tcp的角度去查看连接是否正常)
- SO_LINGER (描述关闭套接字时候的一些设置)
- SO_OOBINLINE
所以为了确保我们通过服务器成功接受的套接字设置了这些选项,我们必须要给listensocket设置这些选项,那么accept的套接字是会继承这些选项的。
Tcp选项
其选项头文件在 netinet/tcp.h 中