Windows网络编程(一)[2]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 kendiv 的 blog

       如果你在bind时,使用了inaddr_any那么,你将可以在所有有效的地址上进行监听,但是socket有一个特性:可在同一端口上绑定多个socket

       让我们看看下面的情况:假设你的系统只有一个ip192.168.0.100,你希望bind4096端口。对于下面的两种bind,当数据包到达时,谁会接收到呢?

local.sin_addr.s_addr = htonl(inaddr_any);

local.sin_addr.s_addr = inet_addr(“192.168.0.100”); 


       winsocke
库是这样处理的:谁绑定的最明确,谁获取数据包。显然,第二种bind将获取到达的数据包。如果避免这种情况呢?使用so_execlusineaddruse选项。需要注意的是,此选项在windows nt 4 service pack 4以后(包括sp4)才可以使用。

示例代码:

#ifndef  so_execlusineaddruse

#define  so_execlusineaddruse  ((int)(~so_reuseaddr))

#endif

 

sockaddr_in local;

bool val = true;

 

local. sin_family = af_inet;

local. sin_port = htons(4096);

local.sin_addr.s_addr = htonl(inaddr_any);

本文关键:Windows网络编程(一)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top