java socket判断是否连接成功_[网络通信]socket编程中检查connect是否成功

论坛 期权论坛 脚本     
已经选择匿名的用户   2021-10-25 13:36   3279   0

一、编程中的connect成功判定

1、非阻塞socket在connect时返回EWOULDBLOCK,说明后台在异步处理中。

2、用select检查socket是否可写,当select返回,并且FD_ISSET为真时,可能存在两种情况,一种的确是连接成功,另外一种是已经失败了,可能是被reset或timeout,此时需要判断是否下真的成功。可以用的办法有:

I、再次调用connect。(windows下在一个成功连接的socket上再次connect会返回-1,WSAGetLastError()为WSAEISCONN,在Linux下会返回0)

II、对socket调用read,读取长度为0的数据,应返回0,表示成功。

III、getpeername获取对端socket地址,如果返回ENOTCONN,表示失败。

IV、用SO_SOCKET调用getsockopt得到socket上的待处理错误,不为0表示失败。

3、windows下connect失败由except set中提示,只检查可写,因此select会一直等到select中设定的时间到达,虽然实际是已经收到了RESET。所以在windows可以考虑用WSAPoll。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:86
帖子:240
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP