[网络通讯]socket编程中检查connect是否成功

1、编程中的connect成功断定编程

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

二、用select检查socket是否可写,当select返回,而且FD_ISSET为真时,可能存在两种状况,一种的确是链接成功,另一种是已经失败了,多是被reset或timeout,此时须要判断是否下真的成功。能够用的办法有:异步

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

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

    III、getpeername获取对端socket地址,若是返回ENOTCONN,表示失败。ast

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

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

相关文章
相关标签/搜索