请教:连接超时设置

红心地瓜 2005-02-23 11:07:33
struct linger Lin;
Lin.l_linger = 500;//设置连接超时0.5秒
Lin.l_onoff = 1;
//连接超时
if(setsockopt(*Sock,SOL_SOCKET,SO_LINGER,(const char*)&Lin,sizeof(Lin))==SOCKET_ERROR)
{
return 0;
}
TimeOut=6000; //设置发送超时6秒
if(::setsockopt(*Sock,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
ULONG32 j=WSAGetLastError();
AfxMessageBox("设置发送超时不成功!");
}
//接收超时
if(::setsockopt(*Sock,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
ULONG32 j=WSAGetLastError();
AfxMessageBox("设置接收超时不成功!");
}

用这些代码设置超时,但是运行起来发现,连接的时候,如果连不上,返回wouldblock,很长时间以后,并不给我close,不知道怎么回事,哪位大侠指点一下
不胜感激
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
红心地瓜 2005-02-23
  • 打赏
  • 举报
回复
那连接超时socket会有什么动作,设置这个连接超时起什么用
我用的是winsock
nuaawenlin 2005-02-23
  • 打赏
  • 举报
回复
好的方法是将套接字设置成非阻塞模式

然后connect()
它立即返回
最后使用select机制来判断该套接字是否可读写

在select中设置超时
吹泡泡的小猫 2005-02-23
  • 打赏
  • 举报
回复
并不给我close 是什么意思?连接超时并不会自动关闭socket
红心地瓜 2005-02-23
  • 打赏
  • 举报
回复
可我用的是winsock的WSAASyncSelect啊,只接收消息,没有去轮询的,没有自己的select机制,怎么办
gdy119 2005-02-23
  • 打赏
  • 举报
回复
好的方法是将套接字设置成非阻塞模式

然后connect()
它立即返回
最后使用select机制来判断该套接字是否可读写

在select中设置超时
//=============================
正解
sharkhuang 2005-02-23
  • 打赏
  • 举报
回复
SO_LINGER是close后马上关闭这个socket。没有time—wait啊

18,356

社区成员

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

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