社区
网络编程
帖子详情
简单问题:如何使用非阻塞(nonblocking) connect ?
Chice_wxg
2004-06-13 05:37:24
rt. 立刻给分!
...全文
235
11
打赏
收藏
简单问题:如何使用非阻塞(nonblocking) connect ?
rt. 立刻给分!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Chice_wxg
2004-06-14
打赏
举报
回复
up
luoxiangdong
2004-06-14
打赏
举报
回复
ioctlsocket(sd, FIONBIO, (unsigned long *)&l)
luoxiangdong
2004-06-14
打赏
举报
回复
int CTcp::recv(int sd, char *buf, int len, int timeout)
{
int len1, len_recv;
time_t t2, t1;
len_recv =0;
time(&t1);
t2 =t1;
int err =0;
int counter=0;
while(len_recv <len)
{
if(t2 -t1 >timeout)
{
WSASetLastError(err);
return len_recv;
}
if(status(sd, "r", timeout-(t2-t1)) <0)
{
err =WSAGetLastError();
//WriteStat("tcp_status err=%d", WSAGetLastError());
WSASetLastError(err);
return len_recv;
}
if((len1 =::recv(sd, &buf[len_recv], len-len_recv, 0)) <=0)
{
err =WSAGetLastError();
//WriteStat("recv err=%d, len1=%d", err, len1);
if(timeout ==0) break;
if(len1 ==SOCKET_ERROR && err ==WSAEWOULDBLOCK)
{
time(&t2);
if(counter++>100)
{
Sleep(100);
counter=0;
}
continue;
}
WSASetLastError(err);
return len_recv;
}
len_recv +=len1;
time(&t2);
}
WSASetLastError(err);
return len_recv;
}
月吻长河
2004-06-14
打赏
举报
回复
使用WSASocket
sharkhuang
2004-06-14
打赏
举报
回复
设置socket为非阻塞!然后connet!还原socket再select!再connect
Chice_wxg
2004-06-13
打赏
举报
回复
信箱: chice[AT]bsjy[DOT]net
PiggyXP
2004-06-13
打赏
举报
回复
哦,呵呵,不好意思*^_^*
我没用过select模型,一直以为是非阻塞的呢
我倒是用非阻塞模型做过东西,但是把代码都发给你你会晕的,因为里面还有很多别的东西呵呵
其实《windows网络编程》是一本很好的书,如果楼主是专门从事网络编程的话,这本书很值得珍藏的^_^
halk
2004-06-13
打赏
举报
回复
阻塞是一种机制而已,不一定要使用WSA系列函数。
另外指出小猪的错误:select模型跟阻塞非阻塞无关。
非阻塞的意义在于调用send,recv的时候会立即返回,而不去管数据是不是处理完了。
Chice_wxg
2004-06-13
打赏
举报
回复
我了解模型,但不知道代码怎么写(我很晕,是吧?其实阻塞的代码我都做好了。 ^_^)
哪位大侠能指点一下救急啊~~~~~~
(不是不想买书,现在实在没机会 & 条件,以后肯定要买的)
还有啊,socket是POSIX兼容标准的,不要用WSA*系列。
PiggyXP
2004-06-13
打赏
举报
回复
楼主在学习非阻塞的socket模型以前最好是对socket通信的基本知识有所了解
然后就是需要看一下非阻塞的各种模型了:
比较简单的,
select模型
WSAAsyncSelect模型
WSAEventSelect模型
比较复杂的,
重叠模型
完成端口模型
这些模型多多少少都要比阻塞模型复杂,但是也能带来更好的性能
具体楼主最好是买本书了,里面的东西很多的^_^
Chice_wxg
2004-06-13
打赏
举报
回复
我发现我真该去买本书了,
只看MSDN真头疼~~~~~~~
C#socket网络编程
2. 发送和接收数据:
使用
Send和Receive方法发送和接收数据,或
使用
异步版本进行
非阻塞
通信。 七、异常处理 在Socket编程中,常见的异常包括SocketException、IOException等,需要正确捕获并处理这些异常,确保程序...
Unix网络编程-9--高级socket编程.ppt
Non
blocking
IO模式允许单个IO操作以
非阻塞
模式执行,避免了整个socket的阻塞,提高了效率。信号驱动IO则允许程序在数据可读时通过信号通知,提高处理速度。 Unix domain socket是一种高效的IPC机制,允许在同一台...
FileTransfer.zip_网络编程_C#_
-
使用
Non
Blocking
模式:设置Socket的
Blocking
属性为false,使Socket变为
非阻塞
模式,提高并发性能。 -
使用
Buffer池:复用缓冲区以减少内存分配和释放的开销。 6. **关闭连接**: - 完成文件传输后,记得关闭...
非阻塞
connect
的测试
工作在ET模式的epoll,描述符基本都是设置为
非阻塞
(
non
blocking
)的。阻塞的
connect
,最多可以等待75s(第二次握手syn+ack一直没到来),效率很低。对于
非阻塞
connect
,调用函数后,通常返回-1,但并不代表出错,...
Linux socket
非阻塞
connect
方法(一)
Linux
非阻塞
connect
方法(linux
non
-
blocking
socket
connect
)
网络编程
18,357
社区成员
64,164
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章