在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下如何进行端口复用???
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下如何进行端口复用???
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都支持哪些操作系统,你可以在这里对比一下。有些操作系统不支持端口重用,你没法使用这个特性,看看能不能跳出技术的范围,从项目的设计上想想办法,绕过这个特性