社区
网络编程
帖子详情
非阻塞socket 如何判断其已建立连接?
blairstar2
2011-11-03 12:57:08
大家好,小弟最近在做一个仪器控制的小项目,碰到一个问题,对于非阻塞的socket,不知道如何判断其已建立连接,比如,现在已经建立连接,但并不知道,如何检查其已建立连接呢?谢谢大家的指导!
...全文
306
9
打赏
收藏
非阻塞socket 如何判断其已建立连接?
大家好,小弟最近在做一个仪器控制的小项目,碰到一个问题,对于非阻塞的socket,不知道如何判断其已建立连接,比如,现在已经建立连接,但并不知道,如何检查其已建立连接呢?谢谢大家的指导!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
哈利路亚1874
2011-11-06
打赏
举报
回复
开线程超时就发测试包不就可以了,在另一端对特定的测试包做过滤,就像检测僵尸连接一样的思路
danscort2000
2011-11-03
打赏
举报
回复
很简单
判断SOCKET是否可写就可以了
在连接没有完成前,基于TCP的SOCKET是不可写的
连接完成后,基于TCP的SOCKET就可写了
Toomj
2011-11-03
打赏
举报
回复
if(SOCKET_ERROR==connect(m_socket,(sockaddr*)&sockaddr, sizeof(sockaddr)))连接失败
叶恭介叶恭介
2011-11-03
打赏
举报
回复
BOOL InitSockt(void)
{
int reVal; //返回值
WSADATA wsData; //WSADATA变量
reVal = WSAStartup(MAKEWORD(2,2),&wsData);//初始化Windows Sockets Dll
//创建套接字
sClient = socket(AF_INET, SOCK_STREAM, 0);
if(INVALID_SOCKET == sClient)
return FALSE;
//设置套接字非阻塞模式
unsigned long ul = 1;
reVal = ioctlsocket(sClient, FIONBIO, (unsigned long*)&ul);
if (reVal == SOCKET_ERROR)
return FALSE;
return TRUE;
}
/**
* 连接服务器
*/
BOOL ConnectServer(void)
{
int reVal; //返回值
sockaddr_in serAddr;//服务器地址
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(SERVERPORT);
serAddr.sin_addr.S_un.S_addr = inet_addr(SERVERIP);
for (;;)
{
//连接服务器
reVal = connect(sClient, (struct sockaddr*)&serAddr, sizeof(serAddr));
//处理连接错误
if(SOCKET_ERROR == reVal)
{
int nErrCode = WSAGetLastError();
if( WSAEWOULDBLOCK == nErrCode ||//连接还没有完成
WSAEINVAL == nErrCode)
{
continue;
}else if (WSAEISCONN == nErrCode)//连接已经完成
{
break;
}else//其它原因,连接失败
{
continue;
}
}
if ( reVal == 0 )//连接成功
break;
}
bConnecting = TRUE;
return TRUE;
}
以上是摘自精通Windows Sockets网络开发:基于Visual C++实现 的代码,你自己体会吧LZ,里面有判断的.必要时自己下载这PDF来看吧.
向立天
2011-11-03
打赏
举报
回复
发个消息过去请求回应
没人理你就是没连上
要是对方按协议恢复了就是连上了
不过
连接没有什么阻塞不阻塞的说法吧
blairstar2
2011-11-03
打赏
举报
回复
[Quote=引用 3 楼 chengbar 的回复:]
connect();
If no error occurs, connect returns zero.
tcp 建立连接不是有3次握手吗,返回0表明已经建立连接
[/Quote]
谢谢您的回答,但这种方法好像是对阻塞的,对非阻塞的好像不能用这么判断。
sevancheng
2011-11-03
打赏
举报
回复
connect();
If no error occurs, connect returns zero.
tcp 建立连接不是有3次握手吗,返回0表明已经建立连接
blairstar2
2011-11-03
打赏
举报
回复
什么模型都没有,就最简单的非阻塞socket,socket(),connect()这类函数,没用那么深!
Eleven
2011-11-03
打赏
举报
回复
你用的什么IO模型?select,WSAAsyncSelect,WSAEventSelect还是OVERLAPPED IO或者是IOCP??
Socket
编程快速入门
本课程将理本课程将理啊 论结合实践,带你从零开始,系统学习
Socket
编程技术,让
Socket
的学习不再那么零散与难以掌握,同时会提炼出
Socket
网络传输的核心思想与构架,并带你踩坑出坑,增加你的分析与处理问题的啊aas...
socket
阻塞和
非阻塞
socket
阻塞和
非阻塞
有哪些不同 1.
建立
连接
阻塞方式下,connect首先发送SYN请求到服务器,当客户端收到服务器返回的SYN的确认时,则connect返回,否则的话一直阻塞。
非阻塞
方式,connect将启用TCP协议的三次握手,...
非阻塞
socket
判断
connect是否成功的方法
1.将打开的
socket
设为
非阻塞
的,可以用fcntl(
socket
, F_SETFL, O_NDELAY)完成(有的系统用FNEDLAY也可). 2.发connect调用,这时返回-1,但是errno被设为EINPROGRESS,意即connect仍旧行还没有完成. 3.将打开的
socket
设...
深入理解阻塞
socket
和
非阻塞
socket
什么是阻塞
socket
,什么是
非阻塞
socket
。对于这个问题,我们要先弄清什么是阻塞/
非阻塞
。阻塞与
非阻塞
是对一个文件描述符指定的文件或设备的两种工作方式。 阻塞的意思是指,当试图对该文件描述符进行读写时,如果...
socket
/io(3)、
socket
阻塞与
非阻塞
,同步与异步、I/O模型
socket
阻塞与
非阻塞
,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/
非阻塞
(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章