简单问题:如何使用非阻塞(nonblocking) connect ?

Chice_wxg 2004-06-13 05:37:24
rt. 立刻给分!
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用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真头疼~~~~~~~

18,357

社区成员

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

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