求教WSAAccept()问题,高手请进,指点迷津!

weikoukou 2005-10-13 04:46:59
今天在网上看到一段代码,如下:
#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
...全文
292 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
weikoukou 2005-10-14
  • 打赏
  • 举报
回复
谢谢大家的热心帮助,虽然暂时我还并没有得到真正的答案。结帖
weikoukou 2005-10-14
  • 打赏
  • 举报
回复
怎么没人回答呀?是我提问的太模糊吗?大家帮帮忙了
danscort2000 2005-10-14
  • 打赏
  • 举报
回复
晕,怎么会去用WSAACCEPT呢?
WSAACCEPT无法和WINDOWS2K等NT操作系统整合,
无法抵御泪滴式DOS攻击的,因此不适合用在服务器类软件中
如果想使用操作系统提供的防止DOS攻击的功能,必须使用ACCEPT而不是WSAACCEPT
去看一下老美写的WIN NT5 SDK编程吧,
里面写的比较详细。

xxrl 2005-10-14
  • 打赏
  • 举报
回复
楼主看看这里吧
http://haohaolin.blogchina.com/3082718.html
kongguangming 2005-10-14
  • 打赏
  • 举报
回复
setsockopt是设置socket 选项的吧
weikoukou 2005-10-14
  • 打赏
  • 举报
回复
我也没找到,网上有,这个倒不重要,重要的是功能有没有其他方法实现
dingpiao 2005-10-14
  • 打赏
  • 举报
回复
我晕,你setsockopt设得那项在我在MSDN中没找到
weikoukou 2005-10-14
  • 打赏
  • 举报
回复
还有 有关这个函数setsockopt的使用我不太明白,希望各位前辈指点一下,感激不尽
weikoukou 2005-10-14
  • 打赏
  • 举报
回复
我的目的只是需要在第一次接受到客户端的连接请求时,就判断是否允许连接,如果允许,则进行正常连接,如果不允许,就连回应包都不发,在不被允许的客户端连接时,它认为服务器端口未开放服务.
dingpiao 2005-10-14
  • 打赏
  • 举报
回复
你只是 WSAAccept用异步,别的都不用吗?
dingpiao 2005-10-14
  • 打赏
  • 举报
回复
代码好长,看得有点晕,可能是因为偶不是高手的缘故吧
weikoukou 2005-10-13
  • 打赏
  • 举报
回复
大家都来看看,帮帮我,感激不尽!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧