Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4183718
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: C/C++

2010-12-06 21:06:53

  1. do
  2. {
  3.     ZeroMemory ( szProtoBuffer, sizeof ( szProtoBuffer ) );

  4.     pMsgHdr = ( PNFS_MSG_HEADER ) szProtoBuffer ;

  5.     ZeroMemory ( pMsgHdr , sizeof ( NFS_MSG_HEADER ) ) ;

  6.     pMsgHdr->dwSignature = RNFS_MAGIC ;
  7.     pMsgHdr->wProtocolVersion = RNFS_PROTOVERSION ;
  8.     pMsgHdr->btPacketType = RNFS_DGRAM_REQUEST ;
  9.     pMsgHdr->dwPacketLength = 0 ;
  10.     pMsgHdr->wFunctionNum = RNFS_OPEN_SESSION ;
  11.     pMsgHdr->dwAckNumber = dwAckNumber ;

  12.     dwSize = MSG_HDR_LEN + pMsgHdr->dwPacketLength ;

  13.     dwStatus = GU_SendAll (
  14.                    SessionSocket ,
  15.                    szProtoBuffer ,
  16.                    dwSize ) ;

  17.     if ( 0 != dwStatus )
  18.     {
  19.         break ;
  20.     }

  21.     dwSize = MSG_HDR_LEN ;

  22.     dwStatus = GU_RecvAll (
  23.                    SessionSocket ,
  24.                    szProtoBuffer,
  25.                    dwSize ) ;

  26.     if ( 0 != dwStatus )
  27.     {
  28.         break ;
  29.     }

  30.     if ( pMsgHdr->dwAckNumber != dwAckNumber )
  31.     {
  32.         dwStatus = ERROR_BAD_FORMAT ;
  33.         break ;
  34.     }

  35.     if ( pMsgHdr->dwRetStatus != 0 )
  36.     {
  37.         dwStatus = pMsgHdr->dwRetStatus ;
  38.         break ;
  39.     }

  40.     dwSize = pMsgHdr->dwPacketLength ;

  41.     dwStatus = GU_RecvAll (
  42.                    SessionSocket ,
  43.                    szProtoBuffer ,
  44.                    dwSize ) ;

  45.     if ( 0 == dwStatus )
  46.     {
  47.         PNFS_SESSION pSession = ( PNFS_SESSION ) szProtoBuffer ;
  48.         * pdwSessionId = pSession->dwSessionId ;
  49.     }
  50. }
  51. while ( FALSE ) ;
  开始觉得不是多此一举吗?仔细分析了以后,才发现很妙,因为在不同的条件判断中就可以按需break;从而达到最终执行到最后一个返回语句。而以前的实现都是以goto来实现的。
阅读(1564) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~