关于IPX广播方式的疑惑?
舟中夜起 2001-02-26 04:03:00 我在分析一个程序的传输数据时,发现以下情况,sendto一次后竟然可以recvfrom两次(注:这是单台机器,没有连接到其它机器,只是安装了网卡和IPX协议),而在我尝试时,第二次的recvfrom因为缓冲区为空,一直无法返回,这是为何?而他就没有问题?我是用hook winsock API方式截获的数据
0)WSAStartup(WORD wVersiontRequired = 257, LPWSADATA lpWSAData)
(124)socket(int af = 6, int type = 2,int protocol = 1000)
(128)socket(int af = 6, int type = 2,int protocol = 1000)
(0)bind(SOCKET s = 128, const struct sockaddr FAR *addr, int namelen)
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = 000000000000, sa_socket = 57367
(0)bind(SOCKET s = 124, const struct sockaddr FAR *addr, int namelen)
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = 000000000000, sa_socket = 57111
(0)setsockopt(SOCKET s = 124,int level = 65535,int optname = 32,const char * optval,int optlen)//设置为广播方式,optname = SO_BROADCAST
optval = 01 00 00 00
(0)setsockopt(SOCKET s = 128,int level = 65535,int optname = 32,const char * optval,int optlen)//设置为广播方式
optval = 01 00 00 00
(20)sendto(SOCKET s = 124, const char FAR* buf, int len = 20, int flags = 0, const struct sockaddr FAR
*to, int tolen)//发送20个字节
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = FFFFFFFFFFFF, sa_socket = 57111
//缓冲区字节内容
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00
(20)recvfrom(SOCKET s = 124, char FAR* buf, int len = 532, int flags = 0, struct sockaddr FAR* from,
int FAR *fromlen)//接受广播
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = E5CE09F8D000, sa_socket = 57111
//缓冲区内容
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00
(20)recvfrom(SOCKET s = 124, char FAR* buf, int len = 532, int flags = 0, struct sockaddr FAR* from,
int FAR *fromlen)//再次接受广播
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = E5CE09F8D000, sa_socket = 57111
//缓冲区内容
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00
(20)sendto(SOCKET s = 124, const char FAR* buf, int len = 20, int flags = 0, const struct sockaddr FAR
*to, int tolen)//发送广播
addr of ipx, sa_family = 6, sa_netnum = 00000000, sa_nodenum = FFFFFFFFFFFF, sa_socket = 57111
13 FFFFFFD3 14 00 02 00 00 00 50 58 45 53 FFFFFFC1 00 00 00 00 00 00 00