如何超时处理?

defendmidfield 2004-07-22 11:47:52
有这样一个需求
往服务端发送请求,然后需要等待服务端response的包

现在是超时如何处理?窝现在感觉可以用event处理,但不知道如何下手

需要一些意见,谢谢
...全文
239 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
PiggyXP 2004-07-22
  • 打赏
  • 举报
回复
嗯,这种情况就是自己设定Timer就好了:)
defendmidfield 2004-07-22
  • 打赏
  • 举报
回复
嗯。看来思路正确...

继续等待其他思路提示者,谢谢

晚上结帐...
gracezhu 2004-07-22
  • 打赏
  • 举报
回复
udp啊??那就无所谓连接超时得问题了,因为根本就没连接,所以你完全可以自己定,用定时器或事件等待都行,只要能计时.
defendmidfield 2004-07-22
  • 打赏
  • 举报
回复
谢谢gracezhu(eutom)

不过这里是通过udp传输,需求是我发送一个数据包到服务器,然后等待服务器返回response,期间也可能收到服务器其他的数据包作处理........

所以select的这个是不行的,我只能有一个标识位,通过标识位在超时的时候看response有没有收到..........

settimer抑或createevent???

谢谢指教.....

gracezhu 2004-07-22
  • 打赏
  • 举报
回复
WSADATA wsd;
SOCKET cClient;
int ret;
struct sockaddr_in server;
hostent *host=NULL;

if(WSAStartup(MAKEWORD(2,0),&wsd)){return 0;}
cClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(cClient==INVALID_SOCKET){return 0;}
//set Recv and Send time out
int TimeOut=6000; //设置发送超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_SNDTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
TimeOut=6000;//设置接收超时6秒
if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
return 0;
}
//设置非阻塞方式连接
unsigned long ul = 1;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)return 0;

//连接
server.sin_family = AF_INET;
server.sin_port = htons(25);
server.sin_addr .s_addr = inet_addr((LPCSTR)pSmtp);
if(server.sin_addr.s_addr == INADDR_NONE){return 0;}

connect(cClient,(const struct sockaddr *)&server,sizeof(server));

//select 模型,即设置超时
struct timeval timeout ;
fd_set r;

FD_ZERO(&r);
FD_SET(cClient, &r);
timeout.tv_sec = 15; //连接超时15秒
timeout.tv_usec =0;
ret = select(0, 0, &r, 0, &timeout);
if ( ret <= 0 )
{
::closesocket(cClient);
return 0;
}
//一般非锁定模式套接比较难控制,可以根据实际情况考虑 再设回阻塞模式
unsigned long ul1= 0 ;
ret = ioctlsocket(cClient, FIONBIO, (unsigned long*)&ul1);
if(ret==SOCKET_ERROR){
::closesocket (cClient);
return 0;
}

18,356

社区成员

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

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