`
kofsky
  • 浏览: 196891 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

一段给人两种不同感觉的代码

阅读更多
bool 
XmlRpcServer::bindAndListen(
int port, int backlog /**//*= 5*/)
...{
  
int fd = XmlRpcSocket::socket();
  
if (fd < 0)
  
...{
    XmlRpcUtil::error(
"XmlRpcServer::bindAndListen: Could not create socket (%s).", XmlRpcSocket::getErrorMsg().c_str());
    
return false;
  }


  
this->setfd(fd);

  
// Don't block on reads/writes
  if ( ! XmlRpcSocket::setNonBlocking(fd))
  
...{
    
this->close();
    XmlRpcUtil::error(
"XmlRpcServer::bindAndListen: Could not set socket to non-blocking input mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
    
return false;
  }


  
// Allow this port to be re-bound immediately so server re-starts are not delayed
  if ( ! XmlRpcSocket::setReuseAddr(fd))
  
...{
    
this->close();
    XmlRpcUtil::error(
"XmlRpcServer::bindAndListen: Could not set SO_REUSEADDR socket option (%s).", XmlRpcSocket::getErrorMsg().c_str());
    
return false;
  }


  
// Bind to the specified port on the default interface
  if ( ! XmlRpcSocket::bind(fd, port))
  
...{
    
this->close();
    XmlRpcUtil::error(
"XmlRpcServer::bindAndListen: Could not bind to specified port (%s).", XmlRpcSocket::getErrorMsg().c_str());
    
return false;
  }


  
// Set in listening mode
  if ( ! XmlRpcSocket::listen(fd, backlog))
  
...{
    
this->close();
    XmlRpcUtil::error(
"XmlRpcServer::bindAndListen: Could not set socket in listening mode (%s).", XmlRpcSocket::getErrorMsg().c_str());
    
return false;
  }


  XmlRpcUtil::log(
2"XmlRpcServer::bindAndListen: server listening on port %d fd %d", port, fd);

  
// Notify the dispatcher to listen on this source when we are in work()
  _disp.addSource(this, XmlRpcDispatch::ReadableEvent);

  
return true;
}

 

这是XML RPC++ 里面的一段实现端口绑定与监听的代码。

两种完全不同的感觉:

1、非常完美,考虑非常完善,每一步都考虑了执行结果是否正确,根据每一步的执行结果来决定下一步的操作;

2、非常丑陋。真正执行的功能代码淹没在众多异常处理代码中;

分享到:
评论

相关推荐

    自己动手写操作系统(含源代码).part2

    而假如你真的因为我的书而重新燃起实践的热情,从而开始一段操作系统旅程,我将会感到非常高兴。 不过我得坦白,在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响,一方面因为操作系统并不是时尚...

    自己动手写操作系统(含源代码).part1

    而假如你真的因为我的书而重新燃起实践的热情,从而开始一段操作系统旅程,我将会感到非常高兴。 不过我得坦白,在写作《自己动手写操作系统》的时候,我并不敢期待它能引起多少反响,一方面因为操作系统并不是时尚...

    二十三种设计模式【PDF版】

    件,一段时间下来,发现不过如此,挺简单好用,但是你真正理解 J2EE 了吗?你在具体案例中的应用是否也是在延伸 J2EE 的思 想? 如果你不能很好的延伸 J2EE 的思想,那你岂非是大炮轰蚊子,认识到 J2EE 不是适合...

    从实例谈面向对象编程、工厂模式和重构

    虽然这里有两种不同类型的媒体AudioMedia 和 VideoMedia(以后可能更 多),但它们同时又都实现 IMedia 接口,所以我们可以将其视为一种产品,用工厂方法模式就可以了。 首先是工厂接口: 程序代码 public ...

    jquery插件使用方法大全

    下面一段代码: 代码 $(document).ready(function(){ alert&#40;"hello"&#41;; });(1) &lt;body&gt;(2) &lt;body&gt;这里的alert&#40;'hello'&#41;;要等到页面全部加载完毕才执行,注意是全部加载,包括dom,图片等...

    你必须知道的495个C语言问题

    3.18 需要根据条件把一个复杂的表达式赋给两个变量中的一个。可以用下面这样的代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样的表达式。a?b=c:d有些编译器可以接受,有些却不能。为...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    编写程序高手的造就的文章

    而对于一个新手,每句话都是新的,他都需要去理解,每一段例子,他都需要去试。  很少看到一种100%全新的技术或理论。就象java language specification里说的,java没有使用任何新技术,用的都是业界久经考验的...

    windows 程序设计

    Windows在其早期曾经走过一段坎坷的道路,征服桌上型计算机市场的前途一度相当渺茫。 Windows简史 在1981年秋天IBM PC推出之后不久,MS-DOS就已经很明显成为PC上的主流操作系统。MS-DOS代表Microsoft Disk ...

    《你必须知道的495个C语言问题》

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 38  3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 38  3.12 我不...

    vc++ 开发实例源码包

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    你必须知道的495个C语言问题.pdf

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 3.12 我不想学习那些复杂...

    excel的使用

    合并不同单元格的内容,还有一种方法是利用CONCATENATE函数,此函数的作用是将若干文字串合并到一个字串中,具体操作为“=CONCATENATE(B1,C1)”。比如,假设在某一河流生态调查工作表中,B2包含“物种”、B3包含...

    基于AT89S52 单片的频率计

    直接采集待测信号,将分两种情况计算待测信号的频率: 如果频率比较高,在一秒内对待测信号就行计数。 如果频率比较低,在待测信号的一个周期内对单片机的工作频率进行计数。 将得到的频率值通过显示译码后直接送入...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl...

    java设计模式CatalogDAOFactory是典型的工厂方法

    在上面的一段代码中一共用了三种模式,除了工厂模式外,还有Singleton单态模式,以及proxy模式,proxy模式主要用来授权用户对forum的访问,因为访问forum有两种人:一个是注册用户 一个是游客guest,那么那么相应的权限就不...

    grub4dos-0.4.4-2009-01-11

    相信许多liunxer初次听到“GRUB4DOS”这个名字,第一感觉就是:这个对我没用,因为我不用DOS,即使用也不会去通过它启动GRUB。先别急,再问一句:您是否用过grldr呢?是否用过MaxDos、一键 ghost、矮人DOS工具盘?...

Global site tag (gtag.js) - Google Analytics