在win2000下可以成功绑定端口,而在Win2003\VISTA\win2008下就绑定失败,错误代码是10013 SOCKET sock; 
sock = socket(AF_INET, SOCK_DGRAM, 0); 
sockaddr_in lis_addr; 
lis_addr.sin_addr.S_un.S_addr = INADDR_ANY; 
lis_addr.sin_family = AF_INET; 
lis_addr.sin_port = htons(bind_port); bool isReuseaddr = TRUE; 
int ret = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,  (const char*)&isReuseaddr, 1); ret=bind(sock, (const struct sockaddr*)&lis_addr, sizeof(sockaddr_in)); 
if(SOCKET_ERROR != ret) 

sockaddr_in remote; 
remote.sin_addr.S_un.S_addr = inet_addr(_pIP); 
remote.sin_family = AF_INET; 
remote.sin_port = htons(_port); int len = strlen(_pBuff); 
ret = sendto(sock, (const char*)_pBuff, len+1, 0, (const sockaddr*)&remote,sizeof(remote)); isReuseaddr = FALSE; closesocket(sock); return ret; 

ret = WSAGetLastError(); 
CHAR ch[20]; 
sprintf(ch, "error code:%d", ret); 
MessageBox(NULL, ch, "error", MB_OK); 请问在2003下如何进行端口复用??? 

解决方案 »

  1.   


    Requirements
    Client
     Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
     
    Server
     Requires Windows Server 2008, Windows Server 2003, Windows 2000 Server, or Windows NT Server.
     
    Header
     Declared in Winsock2.h.
     
    Library
     Use Ws2_32.lib.
     
    DLL
     Requires Ws2_32.dll.
     
    这是MSDN关于setsockopt 函数的说明。
    Client和Server都支持哪些操作系统,你可以在这里对比一下。有些操作系统不支持端口重用,你没法使用这个特性,看看能不能跳出技术的范围,从项目的设计上想想办法,绕过这个特性
      

  2.   

    把setsockopt最后一个参数1改为sizeof(bool)试试,是不是你的系统字节数会不同。
      

  3.   

    对UDP协议,做重复绑定有什么意义?
      

  4.   

    简单的说是为了给进行监听的UDT打洞