TCP socket 阻塞和非租塞

    最近在写socket通信,因为要用到多个通信实体故采用select+非阻塞模式,现将一些测试结果记录在此

客户端:

   客户端在connect之前把套接字设置成非租塞模式,调用connect的时候显示:Operation now in progress,
 此时无法判断connect成功还是失败,
 (1)成功:
  将sockfd 加入select可读集合监控,当connect连接成功时,select是不会返回的,只有当有数据可读select 才会返回;
  将sockfd 加入select可写集合监控,当connect连接成功时,select会返回,
 (2)失败
  将sockfd 加入select可读集合监控,当connect连接失败时 select会返回,
  将sockfd 加入select可写集合监控,当connect连接失败时 select会返回,
  
 鉴于connect情况连接成功但是不会返回的局限性,选择加入select的写集合,
 
 下边针对写集合的select 的返回值做一些处理
 当检测到写集合返回后如果有数据发送 则调用send,若send返回大于0;表明connect 成功,若send返回-1切 错误码不是EAGAIN;说明连接失败此时关闭sockfd;错误原因暂且不表;
 此时也可以尝试recv;如果返回大于0 则表明connect成功切读到数据,如error == EAGAIN 表示connect 成功但是无数据可读,其余错误码表示connect 失败,此时应该关闭sockfd
 
 
服务器:
 创建socket 后设置套接字为非租塞,调用accept 返回大于0 表示有客户端连上, 返回值为-1 切 errno == EAGAIN 表示无客户端连接,其余别的错误码当做错误处理
 新连接的 fd 也要设置为非租塞

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值