lazarus 在操作 socket -1 时的超级巨坑!
clq
浏览(494) -
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 常量
本帖子属于以下条目()
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.