首页
社区
课程
招聘
[求助]winsock的setsockopt() optname 为 0x8000 是干嘛的?
发表于: 2010-5-16 18:40 5628

[求助]winsock的setsockopt() optname 为 0x8000 是干嘛的?

2010-5-16 18:40
5628
在IP无效时(0.0.0.0),普通的winsock设置是不能发数据的。我现在有个程序要在IP无效,dhcp在广播查询的时候时也发送自己广播。

如果没有设置以下这一项是没有办法在IP无效时发送的(我从dhcpcsvc中反汇编出来的):

DWORD  opt = 1234;
setsockopt(sock, SOL_SOCKET, 0x8000, (LPCSTR)&opt, sizeof(DWORD));

但当被分配一个自动IP后,如果还设置这项,就变不能发送了。

还有 0x8000 与 1234 (0x4D2)好像是winsock里的一个特殊值。

请教各位有没知道这是问题,在此感激不尽

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 284
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
都没人知道这个吗?还是觉得这个没有意义?
我今天在Winsock的源码里找到一段 0x8000 的定义:
            case 0x8000:

                if ( OptionLength < sizeof(USHORT) ) {

                    err = WSAEFAULT;
                    goto exit;

                }
                //
                // This is the "special" allow-us-to-bind-to-the-zero-address
                // hack.  Put special stuff in the sin_zero part of the address
                // to tell UDP that 0.0.0.0 means bind to that address, rather
                // than wildcard.
                //
                // This feature is needed to allow DHCP to actually bind to
                // the zero address.
                //

                if ( *(PUSHORT)OptionValue == 1234 ) {

                    socket->DontUseWildcard = TRUE;

                } else {

                    err = WSAENOPROTOOPT;

                }

                break;

现在要怎么解除这个选项,DontUseWildcard 这个又是干嘛用的?
2010-5-18 02:27
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看不懂!帮忙顶一下
2010-5-18 22:44
0
雪    币: 466
活跃值: (175)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
4
到头文件里找找相关的宏定义呗。
2010-5-19 19:22
0
雪    币: 284
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个是Winsock非公开的,头文件找不到的
2010-5-27 21:22
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
MSDN能找到你想要的东西。
2010-5-29 23:37
0
游客
登录 | 注册 方可回帖
返回
//