求教WSAAccept()问题,高手请进,指点迷津!
今天在网上看到一段代码,如下:
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
int CALLBACK MyCondition(LPWSABUF lpCallerId,
LPWSABUF lpCallerData,
LPQOS lpSQOS,
LPQOS lpGQOS,
LPWSABUF lpCalleeId,
LPWSABUF lpCalleeData,
GROUP FAR *g,
DWORD dwCallbackData)
{
return CF_REJECT; // Just Reject All The Connections
}
int main()
{
WSADATA wsaData;
SOCKET ListenSocket, AcceptSocket;
sockaddr_in Client;
int ClientSize = sizeof(Client);
USHORT port = 4321;
struct sockaddr_in service;
WSAStartup(MAKEWORD(2,2), &wsaData);
ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
service.sin_family = AF_INET;
service.sin_port = htons(port);
service.sin_addr.s_addr = htonl(INADDR_ANY);
BOOL bReUse = TRUE;
//问题主要发生在这段,提示'SO_CONDITIONAL_ACCEPT' : undeclared identifier
if (setsockopt(ListenSocket,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(char *)&bReUse,sizeof(bReUse)) != 0)
{
closesocket(ListenSocket);
return -1;
}
bind(ListenSocket, (SOCKADDR *) &service, sizeof(SOCKADDR));
listen(ListenSocket, 8);
while(TRUE)
{
AcceptSocket = WSAAccept(ListenSocket,(SOCKADDR *)&Client, &ClientSize, &MyCondition, 0);
if (AcceptSocket != INVALID_SOCKET)
{
send(AcceptSocket,"You Are Accepted\r\n",strlen("You Are Accepted\r\n"),0);
closesocket(AcceptSocket);
}
else
{
printf("The Connection Is Rejected\n");
}
// Trap The Error & Handle The New Client Request
}
closesocket(ListenSocket);
WSACleanup();
return 0;
}
1、为什么'SO_CONDITIONAL_ACCEPT' : undeclared identifier不好用?我尝试用了其他标示.但是未起到在三次握手前拒绝连接?
2、还有在MyCondition这个条件函数中如何判断预连接客户端的IP?
请高手们指教一二,最好详细些,有代码就更好了,我的编程环境是win2003,VC6.0