对于非阻塞connect的一点认识
来源:互联网 发布:淘宝回收电话卡 编辑:程序博客网 时间:2024/04/19 13:59
一般如下:
connect();
select();
由于是非阻塞,很自然connect立即返回,而不同于阻塞条件下的成功或者失败才返回。
对于TCP来说,非阻塞的connect会立即返回一个错误EINPROGRESS,而且完成3路握手。
对于UDP来说,个人觉得,由于内核只是检查是否存在立即可知的错误,并记录对方的IP和端口号,没必要使用非阻塞的connect。
正常情况:
如果connect成功,select会发现套接字变得可写。出错的话套接字变得可写且可读。
极端情况:
connect于select之间并非原子操作,存在时间间隙。如果这个时候connect成功且收到一些数据的话,这个时候套接字由于有数据可读变得可读,又由于connect成功变得可写。
这样会导致本来connect成功,却误当做发生错误。
解决办法:
1.既然connect成功,那就用getpeername获取远端地址。如果出现ENOTCONN错误,则表示connect失败。 个人觉得这条方案不太好。
2.以值0调用read,如果read失败,那么connect失败,链接成功read返回0.
3.再调用一次connect一次,如果错误为EISCONN,那么套接口已经连接成功。
- 对于非阻塞connect的一点认识
- 非阻塞connect的实现
- 非阻塞connect的实现
- 非阻塞connect的实现
- 非阻塞connect的实现
- 非阻塞connect的实现
- socket非阻塞的connect
- 非阻塞connect的测试
- 非阻塞connect的用途
- 非阻塞connect的实现
- 非阻塞connect的实现
- 非阻塞 connect 的实现
- 对于HBufC的一点认识
- 对于内存的一点认识
- connect的内核实现/非阻塞connect
- 非阻塞Connect对于select时应注意问题, 很精致的分析
- 非阻塞Connect对于select时应注意问题
- 非阻塞Connect对于select时应注意问题
- 这两天刚完成的一个任务,使用destoon,进行b2b网站开发
- Oracle(六)----------------子查询
- 图片显示和复选框全选并删除
- C语言漂亮的宏定义
- 如何查看oracle执行计划
- 对于非阻塞connect的一点认识
- 图的割点、桥与双连通分支
- poj 1006
- Struts2 - Controll Tag的使用(从零开始学习Strust2_06)
- JQuery操作DOM
- mysqlcache
- 字符串合法性检测1
- 图像旋转算法-向左旋转90度
- Linux进程间通信方式简介