• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >PowerShell > linux下非阻塞模式网络通讯模型示例分享

linux下非阻塞模式网络通讯模型示例分享

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了1200 485通讯示例,linux进程间通讯,linux通讯,linux串口通讯,linux通讯录等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

#ifdef __ENABLED_DEBUG_INFO_OUTPUT__
    #define DEBUG_OUTPUT(format) printf( "\nFile: %s : Line: %d ->Function: %s\n"format"\n", __BASE_FILE__, __LINE__, __FUNCTION__ )
    #define DEBUG_OUTPUT_PARA(format,...) printf( "\nFile: %s : Line: %d ->Function: %s\n"format"\n", __BASE_FILE__, __LINE__, __FUNCTION__, __VA_ARGS__ )
#else
    #define DEBUG_OUTPUT(format)
    #define DEBUG_OUTPUT_PARA(format,...)
#endif

// @brief 非阻塞等待套接字是否可读/写
// @param[in] sockfd 套接字描述符
// @param[in] bWhichSet true - 可读集; false - 可写集;
// @param[in] uiTimeOutMS 超时时长(单位:微秒);
// @pre scokfd 有效套接字描述符,即大于等于零(>=0)
// @return 此函数执行结果
// @return  0 - 可以读/写;
//         -1 - 参数不合法;
//         -2 - 检测已超时;
// @note uiTimeOutMS 超时时长,设为零(0),则不等待超时
static inline int
wait_rw_able( int          sockfd,
              bool         bWhichSet,
              unsigned int uiTimeOutMS )
{
    // 默认为检测已超时
    int iReturnValue = -2;

    // 可读描述符集
    fd_set rset;
    // 可写描述符集
    fd_set wset;

    // select 将等待的时间
    timeval tv;

    do // 非循环,只是为了保证函数只有一个返回点
    {
        // 参数不合法
        if ( 0 > sockfd )
        {
            iReturnValue = -1;
            break;
        }

        // 注:每次调用 select 之前都要重设一次!
        tv.tv_sec  = 0;
        tv.tv_usec = uiTimeOutMS;

        // 检测是否可读
        if ( true == bWhichSet )
        {
            // 清除其所有位
            FD_ZERO( &rset );
            // 设置关心的描述符
            FD_SET( sockfd, &rset );

            // 大于零(0) - 有套接字可读,零(0) - 没有,负数 - 出错
            if ( 0 < select( sockfd + 1, // 从描述符零(0)开始搜索,故此要对套接字描述符加壹(1)
                             &rset,      // 可读描述符集
                             NULL,       // 可写描述符集
                             NULL,       // 异常描述符集
                             &tv ) )     // 等待时间
            {
                // 可读描述符是我们的套接字
                if ( FD_ISSET( sockfd, &rset ) )
                {
                    iReturnValue = 0;
                    break;
                }
            }
        }
        // 检测是否可写
        else
        {
            // 清除其所有位
            FD_ZERO( &wset );
            // 设置关心的描述符
            FD_SET( sockfd, &wset );

            // 大于零(0) - 有套接字可读,零(0) - 没有,负数 - 出错
            if ( 0 < select( sockfd + 1, // 从描述符零(0)开始搜索,故此要对套接字描述符加壹(1)
                             NULL,       // 可读描述符集
                             &wset,      // 可写描述符集
                             NULL,       // 异常描述符集
                             &tv ) )     // 等待时间
            {
                // 可读描述符是我们的套接字
                if ( FD_ISSET( sockfd,
                               &wset ) )

您可能想查找下面的文章:

  • linux下非阻塞模式网络通讯模型示例分享

相关文章

  • Powershell中创建自定义对象例子
  • PowerShell函数用Hash表传参实例
  • PowerShell中把IP转换为长整形数字的方法
  • PowerShell实现获取进程所有者
  • PowerShell小技巧之使用Verb打开程序
  • Powershell实现捕获系统内置EXE程序的异常
  • PowerShell中改变F1帮助文档命令获取方式为在线文档的方法
  • PowerShell中字符串分行显示的两种方法技巧
  • Windows Powershell 变量的类型和强类型
  • PowerShell数组结合switch语句产生的奇特效果介绍

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Powershell批量给文件增加前辍实例
    • 了解Powershell中的Exit函数
    • PowerShell显示隐藏文件和系统文件的方法
    • 浅谈PowerShell 捕获错误
    • Powershell 查询 Windows 日志的方法
    • Python中调用PowerShell、远程执行bat文件实例
    • PowerShell函数中使用必选参数实例
    • PowerShell入门教程之Cmd命令与PowerShell命令相互调用的方法
    • Powershell创建简洁的HTML报告例子
    • PowerShell中调用WPF生成炫酷窗口实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有