织梦CMS - 轻松建站从此开始!

罗索

我常用的 socket connect 代码,主要是为了记录非阻塞问题

jackyhwei 发布于 2011-07-28 13:59 点击:次 
socket API连接服务器,主要是为了记录非阻塞问题
TAG:

SOCKET connectToS()
{
    int e=0;
    struct timeval timeout ; 
    fd_set r;
    SOCKET s=socket(AF_INET,SOCK_STREAM,0);
    //设置非阻塞方式连接 
    unsigned long ul1 = 1; 
    e = ioctlsocket(s,FIONBIO,(unsigned long*)&ul1); 
    if(e==SOCKET_ERROR)
    {
        fprintf(stderr,"设置[非阻塞]方式错误,请重新启动!/n");
        ::closesocket (s);
        return -1;  
    }
    struct sockaddr_in addr;   
    memset(&addr,0,sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;   
    addr.sin_port = htons(SERVERPORT);
    addr.sin_addr.s_addr = inet_addr(SERVERIP);

    connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
    //select   模型,即设置超时 
    FD_ZERO(&r); 
    FD_SET(s,&r); 
    timeout.tv_sec = 5;   //连接超时10秒 
    timeout.tv_usec =0; 
    e=select(NULL,NULL,&r,NULL,&timeout); 
    if(e<=0) 
    {
        fprintf(stderr,"连接超时,请检查网络是否可用!/n");
        ::closesocket(s); 
        return -1;
    }

    unsigned long ul2= 0; 
    e   =   ioctlsocket(s,FIONBIO,(unsigned long*)&ul2); 
    if(e==SOCKET_ERROR)
    {
        fprintf(stderr,"设置[阻塞]方式错误,请重新启动!/n");
        ::closesocket (s); 
        return -1;
    }
    return s;
}

(zblue78)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201107/14756.html]
本文出处:CSDN博客 作者:zblue78
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容