请教下这段代码为什么这么写?

blackgentle 2009-04-13 11:11:57
看到这么一段代码,感到有些奇怪,为什么要分成两步做,直接Set minisize不就行了吗?
int buf_size = MAX_SOCKBUF, buf_minsize = MAX_SOCKBUF / 2; // UDP
if (::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(int)) != 0
&& ::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_minsize, sizeof(int)) != 0)
GetSockErrorMsg("setsockopt(sendbuf)");

...全文
92 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinona 2009-04-15
  • 打赏
  • 举报
回复
其实我个人觉得也还是有一定的道理的..
假如buf_size设置过大可能就不能设置成功,
于是他就想那我就将大小减半再试试,
如果还不行,那就给你抛出给错误...
如果减半可以,那就按减半设置..
danscort2000 2009-04-15
  • 打赏
  • 举报
回复
再补充一下
就是第一个条件 if (::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(int)) != 0)
通常都是不成立
因为函数调用成功返回0 ,所以 0!=0 一般不成立,后面那个函数也就不会执行了
danscort2000 2009-04-15
  • 打赏
  • 举报
回复
if (::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(int)) != 0
&& ::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_minsize, sizeof(int)) != 0)
GetSockErrorMsg("setsockopt(sendbuf)");

等于
if (::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(int)) != 0)
{

if(::setsockopt(udp_sd, SOL_SOCKET, SO_SNDBUF, (char *)&buf_minsize, sizeof(int)) != 0)
GetSockErrorMsg("setsockopt(sendbuf)");

}

事实上第一个一般不会失败,,所以后面那个不会执行
不过这个函数写的实在是没头脑
我也不知道为什么这么写,P用没有,该出错还是出错的

至于是 && 还是 ||
没什么影响,因为都是左结合运算
blackgentle 2009-04-15
  • 打赏
  • 举报
回复
谢谢大家的回答!
danscort2000 2009-04-14
  • 打赏
  • 举报
回复
左结合
如果第一个成功,则不执行第二个
只在失败的时候才执行第二个
blackgentle 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 danscort2000 的回复:]
左结合
如果第一个成功,则不执行第二个
只在失败的时候才执行第二个

[/Quote]
但这个地方是与操作符啊,应该是两个表达式都成立才行吧。
说详细点。
xjpresley 2009-04-14
  • 打赏
  • 举报
回复
正解

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧