登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: lazarus 在操作 socket -1 时的超级巨坑!     [回主站]     [分站链接]
lazarus 在操作 socket -1 时的超级巨坑!
clq
浏览(307) - 2020-10-05 13:27:37 发表 编辑

关键字:

[2020-10-05 13:37:15 最后更新]
lazarus 在操作 socket -1 时的超级巨坑!

在 C 语言系中一般对比 socket 的操作都是与 -1 比较结果。这在很多很多开发源码中都是这样的,虽然这些 -1 在不同的场合各自有自己的定义名称,但在传统上使用 -1 还是非常常见的。

在 delphi 中也是如此。

但是! lazarus 下不行!会引起严重的错误,原因是 socket 等于相关数据在 lazarus 是无符号的 uint 或者 dword 而对于 lazarus 来说,用无符号与有符号的对比无论如何都是 false !所以,这是非常要小心的地方,而对于这种情况 lazarus 又只是提出警告,而不是中止编译,所以这真的是一个超级大坑!

---- 不完整示例
1.
//if gSo<>-1 then s := socketplus_lazarus.RecvBuf(gSo, err);
if gSo<>InvalidSocket then s := socketplus_lazarus.RecvBuf(gSo, err);

2.
//if (addr.sin_addr.s_addr = -1) then //lazarus 下要用 INADDR_NONE 常量
if (addr.sin_addr.s_addr = INADDR_NONE) then //lazarus 下要用 INADDR_NONE 常量


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
lazarus开发 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1