美文网首页
有限时间完成connect

有限时间完成connect

作者: 0X7C00 | 来源:发表于2018-07-29 22:23 被阅读0次

    阻塞方式

    1. alarm,判断返回值是否是EINPROGRESS
    2. select (timeout) 检查返回值是否为1
    3. select + alarm 检查返回值是否为1

    非阻塞方式

    背景知识:
    当connect为非阻塞时,调用connect后错误码返回EINPROGRESS.
    调用Select时,当connect连接完成时,其套接字是可写的,当连接遇到错误时,描述符既可读又可写,需要调用getsockopt获取套接字待处理的错误(用SO_ERROR套接字选项),如果连接成功建立,则返回0;如果连接错误,会得到一个对应的连接错误的errno值。

    取代getsockopt的方法

    1. 调动getpeername代替getsockopt。如果getpeername以ENOTCONN错误返回,则建立连接失败
    2. 调用read(0)。如果建立连接失败,那么返回相应的错误值;如果建立连接成功则返回0.
    3. 再次调用connect。如果错误是EISCONN,那么套接字已连接。

    注:
    若阻塞状态下connect失败,则connect不可重复调用。
    若在阻塞状态下被中断了,则只能调用Select,执行上面非阻塞的相关操作来判断套接字是否连接成功。

    相关文章

      网友评论

          本文标题:有限时间完成connect

          本文链接:https://www.haomeiwen.com/subject/xifmpftx.html