window和linux下,设置socket为阻塞模式

1.创建socket默认为阻塞。一下一段小程序,给定的是跨平台window和linux,设置socket为阻塞模式

void SetSocketUnBlock(SOCKET hSocket)
{
#ifdef WIN32
    u_long mode = 1;
    if (SOCKET_ERROR == ioctlsocket(hSocket, (long)FIONBIO, &mode)) //非阻塞,异步模式。

    //允许或禁止套接口s的非阻塞模式。argp指向一个无符号长整型,如允许非阻塞模式则非零,如禁止非阻塞模式则为零。

    {
        COM_ASSERT(0); // coding error checking
        return;//lint !e527 ignored the unreachable warning
    }
#else
    int iGetFL = fcntl(hSocket, F_GETFL);//linux下,设置非阻塞,异步模式
    if (-1 == iGetFL)
    {
        COM_ASSERT(0);
        return;
    }
   
    if (-1 == fcntl(hSocket, F_SETFL, iGetFL | O_NONBLOCK))
    {
        COM_ASSERT(0);
        return;
    }
#endif
}

详细说明,可参考ioctlsocket(),fcntl()

 

---------------------------------------------------------------------------------

 

2.设置socket为非阻塞模式

void SetSocketBlock(SOCKET hSocket)
{
#ifdef WIN32
    u_long mode = 0;
    if (SOCKET_ERROR == ioctlsocket(hSocket, (long)FIONBIO, &mode))
    {
        COM_ASSERT(0); // coding error checking
        return; //lint !e527 ignored the unreachable warning
    }
   
#else
    int iGetFL = fcntl(hSocket, F_GETFL);
    if (-1 == iGetFL)
    {
        COM_ASSERT(0);
        return;
    }
   
    if (-1 == fcntl(hSocket, F_SETFL, iGetFL & (~O_NONBLOCK)))
    {
        COM_ASSERT(0);
        return;
    }
#endif //! END WIN32
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值