社区
网络编程
帖子详情
accept()失败,怎么回事呀。 大家请进来(在线等...)
hanzp
2003-04-18 02:51:52
在同一客户端连续发出连接请求后我的服务端就出错,这是为什么?
我是这样创建连接套节字的
s = accept( myListenSocket, NULL, NULL);
ASSERT( s != INVALID_SOCKET )
但是在不同的客户端发出请求就没有问题
...全文
445
10
打赏
收藏
accept()失败,怎么回事呀。 大家请进来(在线等...)
在同一客户端连续发出连接请求后我的服务端就出错,这是为什么? 我是这样创建连接套节字的 s = accept( myListenSocket, NULL, NULL); ASSERT( s != INVALID_SOCKET ) 但是在不同的客户端发出请求就没有问题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
BinaryPoet
2003-05-07
打赏
举报
回复
你不会没有在InitInstance中调用AfxSocketInit()吧!呵呵
fbmsf
2003-05-07
打赏
举报
回复
来接分的。
Sander
2003-04-21
打赏
举报
回复
问题是明显的,你的socket没有建立成功,你就用这个socket call其他function.
hanzp
2003-04-21
打赏
举报
回复
to lichungen(阿根) :
我的 s = accept( myListenSocket, NULL, NULL); 是在我的ConnThread中的,每个线程中都有的。
我的监听线程错误是有时候我明明发了2个请求,可是它接收到了3个,结果创建第3个的时候就错误了
我不知道为什么。
我还发了个帖子的,里面写的清楚点,帮我看看吧。分数2个帖子一起算好了
http://expert.csdn.net/Expert/topic/1684/1684749.xml?temp=.3614771
lichungen
2003-04-20
打赏
举报
回复
s = accept( myListenSocket, NULL, NULL);
是不是在每个线程中都定义了s呢,如果没有的话,在s没有关闭前,又给它重新赋值就会产生异常。
你的监听线程错误是什么呢,发生在哪里呢?你讲详细点
hanzp
2003-04-18
打赏
举报
回复
我现在知道了,不是这里的问题,监听线程出错了。
当同时有多个请求连接时,我的监听SOCKET发生错误了。
这是为什么呢?
我的监听代码,能帮我看看吗?
s = socket( AF_INET, SOCK_STREAM, 0);
addr.sin_addr.s_addr = inet_addr( "210.28.66.244");
addr.sin_family = AF_INET;
addr.sin_port = htons(5000);
bind( s, (sockaddr*)&addr, sizeof(addr) );
listen(s, 10);
hEvent = WSACreateEvent();
lphEvents[0] = hEvent;
pEvent = new WSANETWORKEVENTS;
WSAEventSelect( s, hEvent, FD_ACCEPT|FD_CLOSE);
for(;;)
{
WSAWaitForMultipleEvents( 1, lphEvents, false, WSA_INFINITE, false);
WSAEnumNetworkEvents( s, hEvent, pEvent);
switch( pEvent->lNetworkEvents )
{
case FD_ACCEPT:
ShowInfo(hWnd, "收到连接请求");
pConnParam = new ConnParam;
pConnParam->hWnd = pListenParam->hWnd;
pConnParam->pListenSocket = &s;
AfxBeginThread( ConnThread, (LPVOID)pConnParam, THREAD_PRIORITY_NORMAL, 0, 0, NULL);
break;
case FD_CLOSE:
ShowInfo(hWnd, "停止监听");
break;
default:
ShowInfo(hWnd, "发生未知错误");
return EXIT_FAILURE;
}
}
谢谢,分数不够可以再加
hanzp
2003-04-18
打赏
举报
回复
我是用WSAEventSelect的,是只响应FD_ACCEPT 和FD_CLOSE;
每次有FD_ACCEPT,就生成一个连接线程,所有的send和recv都是在我的连接线程中进行的呀,监听套接字没有read的
雷大少爷
2003-04-18
打赏
举报
回复
为侦听套接字用WSAAsyncselect注册网络事件FD_READ,FD_CLOSE屏蔽码,在处理FD_READ 消息处理函数中作一下检验就ok了。
hanzp
2003-04-18
打赏
举报
回复
没有啊,程序是在
ASSERT( s != INVALID_SOCKET )
那里报错了的
wangzao
2003-04-18
打赏
举报
回复
你的accept后面肯定写了recv函数没有???如果写了,而服务器段没写send就会出现这种情况!
关于Linux内核引入的
accept
_local参数的一个问题
前些天讨论了一个问题,在问题搞定之后,我就着这个话题又多想了一些,最终折腾出一道非常不错的题目,我觉得可以作为面试题选用,旨在考查应聘者对Linux IP路由实现,Policy Routing,iptables等知识点的掌握程度,...
网络通信之--
accept
死循环
通信服务器一直运行,每次成功
accept
,都会分配新的 socket 资源,但是因为未能有效的检测和处理socket 的关闭事件,导致未能释放 socket,最后,socket 资源被耗尽,再也不能接入新的连接了。同时,新的连接不断的...
分析“关于Linux内核引入的
accept
_local参数的一个问题”
参考关于Linux内核引入的
accept
_local参数的一个问题,自己分析一下 二、分析 2.1 问题描述 ip link add veth0 type veth peer name veth1 ip addr add dev veth0 1.1.1.2/24 ip addr add dev veth1 ...
accept
()使用
参数s的socket必需先经bind()、listen()函数处理过,当有连线进来时
accept
()会返回一个新的socket处理代码,往后的数据传送与读取就是经由新的socket处理,而原来参数s的socket能继续使用
accept
()来接受新的连线要求...
accept
函数
13.2.5
accept
函数 处于监听状态的服务器在获得客户机的连接请求后,会将其放置在等待队列中。当系统空闲时,将接受客户机的连接请求。接收客户机的连接请求使用
accept
函数,该函数的具体信息如表13.6所示。 表13.6...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章