wsaaccept拒绝客户端后出现syn_received,求助解决

huangjacky 2010-10-09 09:56:19
首先我服务器向对客户端连接来的IP进行过滤,所以我采用wsaaccept函数,设置了回调函数在回调函数里面验证IP地址。
下面是步骤:
1 在listen之前setsockopt来设置回调函数返回后wsaaccept才能返回。
2 wsaeventselect设置FD_ACCEPT,这样有客户端连接进来就会有提示。
3 wsaaccept设置好回调函数。

现在的问题来了。
当客户端的ip在黑名单中,回调函数返回CF_REJECT.wsaaccept返回值是INVALID_SOCKET,这里都是和我们想要的是一样的。wsagetlasterror返回WSATry_Again。与此同时客户端的wsaconnect连接失败,错误代码是超时。
当有新的连接再连接进来的时候,服务端FD_ACCEPT不会再有响应。
我用netstat -an 查看,发现服务端端口和客户端第一连接进来的端口还在syn_received也就是还在syn握手。

我想问怎么关闭它的握手,以便能接受下一次的客户端连接。
谢谢
...全文
227 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgc7622 2011-04-02
  • 打赏
  • 举报
回复
使用WSAACCEPT的回调函数不会有什么问题的。
huangjacky 2010-10-09
  • 打赏
  • 举报
回复
从一些网站上面看到貌似,用wsaaccept的回调函数来拒绝都会引发这个问题。
别人给的意见先accept成功然后根据远程地址再判断 不满足要求就closesocket。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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