socket编程

.1.关于tcp连接异常断开

(1)服务器端异常断开,setsockopt函数设置SO_REUSE,保证可以再次重启服务端

(2)客户端异常断开,要采用心跳包(保活)机制。

          <1>setsockopt函数,SO_KEEPALIVE, 发送探测包(该进程所有的socket都会有这个设置,不灵活)

           <2>select函数管理文件,延时等待,超时断开

           <3>应用层发送心跳包,可以设置定时发几次 (推荐使用这种,易于控制)

一般连接断开后recv就会返回0,

而keepalive定时器定时完成后,recv返回-1, 同时errno对应错误4(未验证成功)。

意义:

如果不去处理异常连接,会占用资源,比如,大量连接出于close_wait状态,无法正常断开,释放资源,达到监听上限,这样就无法处理新的连接请求。

 

2.关于bind函数

1.服务端进程bind IP地址:目的是限制了服务端进程创建的socket只接受那些目的地为此IP地址的客户链接,一般一个服
务器程序里都有,servaddr.sin_addr.s_addr = htonl(INADDR_ANY); // 只是针对IP4,IP6代码不太一样
这样一句话,意思就是:我不指定客户端的IP,随便连,来者不拒!

2.bind时候没有指定哪一项(置为0),内核会帮你选择。客户端进程bind端口:  由进程选择一个端口去连服务器,(如果默认情况下,调用bind函数时,内核指定的端口是同一个,那么调用多个调用了bind()的client程序,会出现端口被占用的错误)注意这里的端口是客户端的端口。如果不分配就表示交给内核去选择一个可用端口。

3.服务器和客户端都可以bind,bind并不是服务器的专利(1)需要在建连前就知道端口的话,需要 bind (2)需要通过指定的端口来通讯的话,需要 bind 。

http://blog.sina.com.cn/s/blog_62538d6f0100fs7f.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值