套接字中connect阻塞与非阻塞问题
来源:互联网 发布:网络爬虫php 编辑:程序博客网 时间:2024/06/11 10:30
原文地址:http://bbs.csdn.net/topics/340155739
int
PASCAL FAR connect (SOCKET s,
const
struct
sockaddr FAR *name,
int
namelen);
(1)如果服务器端程序已经运行, 客户端执行connect()函数,正常没问题,
(2)如果服务端程序没有运行的时候,客户端执行connect()函数,会在此函数停留很长时间,整个程序界面几乎死掉,要3秒左右才能执行完connect()函数并返回结果,
请问如何在(2)的情况下让connect函数立刻返回?
//设置非阻塞方式连接
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;
- 套接字中connect阻塞与非阻塞问题
- 非阻塞 connect套接字
- 阻塞套接字与非阻塞套接字
- 阻塞套接字与非阻塞套接字
- 非阻塞connect问题
- 非阻塞套接字
- socket connect 阻塞与非阻塞
- socket connect 阻塞与非阻塞 .
- 设置阻塞或非阻塞套接字
- 非阻塞connect select问题
- 非阻塞套接字用法
- 套接字编程非阻塞
- 阻塞套接字和非阻塞套接字
- 第十六章非阻塞connect实例 与 非阻塞accept
- 阻塞TCP套接字connect超时设置
- linux非阻塞套接字的联机请求问题
- 阻塞非阻塞与异步同步问题
- 阻塞与非阻塞
- 矩阵的逆,余子式,代数余子式,增广矩阵
- Lambda 表达式有何用处?如何使用?
- 软考设计模式——装饰模式(C++)
- 阿里史上首款AI硬件设备,为何如此“听话”?
- mysql格式化日期
- 套接字中connect阻塞与非阻塞问题
- 安卓中Rxjava(观察者模式、异步)的简单使用(1) 观察者与被观察者线程之间的关系
- 安卓自定义view
- android TextView滚动和转义换行等相关问题
- python I/O编程小笔记
- windows系统 忘记mysql密码解决方案
- Java反射-Method
- PHP限制网页只能在微信内置浏览器中查看并显示
- 最简单的基于FFmpeg的AVDevice例子(屏幕录制)