1.设置/获取套接字选项

int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len);
int getsockopt(int socket, int level, int option_name, void *restrict option_value, socklen_t *restrict option_len);

2.常用套接字选项的运用

  • SO_REUSEADDR选项
     设置该选项, 可以确保服务器快速重启时,不会因为监听的端口被占用而失败。
  • SO_KEEPALIVE选项

服务器端设置该选项,可以定时检测客户端的状态。如果客户端因为异常退出, 则套接字被关闭,检测的默认时间间隔为2小时。

如何设置时间间隔?

修改 /ect/sysctl.conf

添加如下3行:

net.ipv4.tcp_keepalive_intvl=20//失败探测间隔时间20秒
net.ipv4.tcp_keepalive_probes=3//失败探测次数
net.ipv4.tcp_keepalive_time=60//间隔时间

然后重启内核:sysctl -p;

  • SO_LINGER选项

如果选择此选项,close或 shutdown将等到所有套接字里排队的消息成功发送或到达延迟时间后才会返回。否则,调用将立即返回。

  • SO_CONNECT_TIME选项
     通过 getsockopt获取该选项的值。可以用来判断这个SOCKET是否已经超时。是防止攻击服务器的好方法。
  • 设置SOCKET为非阻塞
              static void setnonblocking(int sock)
{
int opts; opts=fcntl(sock,F_GETFL);
if(opts<0)
{
exit(1);
} opts = opts|O_NONBLOCK; if(fcntl(sock,F_SETFL,opts)<0)
{
exit(1);
}
}

最新文章

  1. iOS 单例的销毁
  2. Java设计模式 工厂模式概念解析
  3. JSP+Servlet+javabean+mysql实现页面多条件模糊查询
  4. ef to sqlite 实际开发问题终极解决方法
  5. JDBC学习笔记2
  6. Linux 命令 - echo: 显示一行文本
  7. P59、面试题7:用两个栈实现队列
  8. 项目属性--&gt;生成事件--&gt;后期生成事件命令行
  9. hibernate数据库方言
  10. 获取SqlServer当前链接数
  11. java.lang.OutOfMemoryError: unable to create new native thread(转)
  12. HTML5的绘图的支持
  13. hadoop、spark/storm等大数据相关视频资料汇总下载
  14. Mac OS X于Android Kernel下载方法
  15. 深入浅出MyBatis-Sqlsession
  16. SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解
  17. [Luogu 1395] 会议
  18. 金三银四,如何征服面试官,拿到Offer
  19. centos关机与重启命令
  20. Oracle 获取前几行数据问题的陷阱

热门文章

  1. 求n的阶乘
  2. ES6数组新增的几个方法
  3. 聊聊并发(一)深入分析Volatile的实现原理
  4. 操作系统内存管理之 内部碎片vs外部碎片
  5. pm2进阶使用
  6. SpringMVC注解@Component、@Repository、@Service、@Controller区别
  7. javascript实现图片的预览
  8. C++并发高级接口:std::async和std::future
  9. Linux服务器搭建相关教程链接整理
  10. JUnit单元测试教程(翻译自Java Code Geeks)