推扬网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
推扬网 门户 你问我答 查看内容

王李丹:如何判断非阻塞模式的socket连接是否可读可写

2020-8-11 18:07| 发布者: admin| 查看: 85| 评论: 0

摘要: 祝永平的回答: 1.设置socket非阻塞 2.connect-----立即返==0 connect功 ??==?-1??errno=?EINPROGRESS 3.用select判断写异(更加严谨) 4.?if?(?写?||?现异?)---关闭socket else{ //写?且异??用getsocketopt判断错误码 ...

祝永平的回答:

1.设置socket非阻塞 2.connect-----立即返==0 connect功 ??==?-1?&&?errno=?EINPROGRESS 3.用select判断写异(更加严谨) 4.?if?(?写?||?现异?)---关闭socket else{ //写?且异??用getsocketopt判断错误码 errno?==?0??;?//connect?success } //附代码 仅供参考 ????unsigned?long?ul?=?1; ????ioctl(sock_fd,?FIONBIO,?&ul);??//设置非阻塞模式 ????ret?=?::connect(sock_fd,?(struct?sockaddr?*)&addr,?sizeof(sockaddr_in)); ????if(ret<0?&&?errno!=EINPROGRESS) ????{ //连接失败 ????????::close(m_file); return?ret; ????} ????else?if(ret/ret?==?-1???errno?==?EINPROGRESS??判断socket写异 ?????????int?&sockfd?=?sock_fd; ????????fd_set?mask,?mask_expt; ????????FD_ZERO(&mask); ????????FD_SET(sockfd,&mask); ????????FD_ZERO(&mask_expt);? ????????FD_SET(sockfd,&mask_expt); ????????struct?timeval?timeout; ????????timeout.tv_sec=0; ????????timeout.tv_usec=50000;?????????????//?50?ms'?latency ????????if(select(sockfd?+?1,?NULL,?&mask,?&mask_expt,?&timeout)?>?0) ????????{ if(!FD_ISSET(sockfd,?&mask)?||??//套接字绪 FD_ISSET(sockfd,?&mask_expt))??//异套接字绪 { ::close(sockfd); return?ret; } ???????? int?error?=?-1; ????????????????int?len?=?sizeof(int); //non-blocking?socket?in?progress?step?3:?check?result? #ifdef?HP_UX getsockopt(sockfd,SOL_SOCKET,SO_ERROR,&error,?&len); #else????//?linux getsockopt(sockfd,SOL_SOCKET,SO_ERROR,&error,(socklen_t*)&len); #endif ????????????if(?0?==?error?) ????????????{??????????? ret?=?0;?//?connected?ok ????????????} ????????????else ????????????{ ::close(sockfd); return?ret; ????????????} ????????}else{//socsket写?或异??退 ::close(sockfd); return?ret; } ????} ???? ????//connect

老神仙的回答:

搜一下:如何判断非阻塞模式的socket连接是否可读可写


鲜花

握手

雷人

路过

鸡蛋

最新评论

热门推荐
最新资讯

广告服务|投稿要求|禁言标准|版权说明|免责声明|手机版|小黑屋|推扬网 ( 粤ICP备18134897号 )|网站地图 | 邮箱:vayae@hotmail.com

GMT+8, 2025-5-1 09:48 , Processed in 0.061669 second(s), 29 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

返回顶部