烦啊,异步socket如何控制发送接收超时 各位大侠,在下的完成端口程序要控制接收和发送超时,不知道怎么玩,我现在用的是比较土的办法,开始操作前计时,然后另外线程来检查,如果时间到来就取消操作(关闭套接字),我发现这个开始计时的操作也要浪费不少时间,不知道各位有什么更好的具有创意的方法来控制这个,套接字选项不行,只用于阻塞套接字 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to yhqs540(普通话,语言中的战斗机): 不解,请详细解释 http://search.csdn.net/Expert/topic/989/989326.xml?temp=4.793948E-02 to gracezhu: 并不是那个异步控制发送接收超时啊 这个应该是可以用的LPHOSTENT ScanIPAddr(DWORD dwIP){ SOCKET sock = INVALID_SOCKET; LPHOSTENT lphost = NULL; SOCKADDR_IN server; u_long ul = 1; struct timeval timeout ; fd_set r; memset(&server, 0, sizeof(server)); server.sin_family = AF_INET; server.sin_port = _nPort; server.sin_addr.s_addr = htonl((u_long)dwIP); sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sock == INVALID_SOCKET) return NULL; //设置非阻塞方式连接 if(ioctlsocket(sock, FIONBIO, (u_long*)&ul)==SOCKET_ERROR) return NULL; if(0 != connect(sock, (SOCKADDR*)&server, sizeof(server))) { if(WSAGetLastError() != WSAEWOULDBLOCK) { closesocket(sock); return NULL; } } //select 模型,即设置超时 FD_ZERO(&r); FD_SET(sock, &r); timeout.tv_sec = 0; //连接超时0秒 timeout.tv_usec = 700; if(select(0, 0, &r, 0, &timeout) <= 0) { closesocket(sock); return NULL; } lphost = gethostbyaddr((const char *)&(server.sin_addr), 4, AF_INET); closesocket(sock); return lphost;} 奇怪的BSTR的问题,在线求解。。。。 还是按钮的问题? 一个很简单的问题,可是我就是不知道问题出在哪里?:( --------100分-----------请问CListCtrl如何得到鼠标单击指定行列的内容? 如何屏蔽USB设备在XP系统中的自动播放功能? 很简单的问题 vs2008里用MFC开发网页控制程序,用了webbrowser控件为什么没有GetDocument()方法 关于微软MCSD认证的一些问题!!! 关于Spin用法的一个请教,有点意思哟,大家进来看嘛,祝大家新年愉快! 如何打开文件 改变窗体背景色 想知道我的这段代码得出来的日期为什么不对
不解,请详细解释
并不是那个异步控制发送接收超时啊
LPHOSTENT ScanIPAddr(DWORD dwIP)
{
SOCKET sock = INVALID_SOCKET;
LPHOSTENT lphost = NULL;
SOCKADDR_IN server;
u_long ul = 1;
struct timeval timeout ;
fd_set r; memset(&server, 0, sizeof(server));
server.sin_family = AF_INET;
server.sin_port = _nPort;
server.sin_addr.s_addr = htonl((u_long)dwIP); sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(sock == INVALID_SOCKET)
return NULL; //设置非阻塞方式连接
if(ioctlsocket(sock, FIONBIO, (u_long*)&ul)==SOCKET_ERROR)
return NULL; if(0 != connect(sock, (SOCKADDR*)&server, sizeof(server)))
{
if(WSAGetLastError() != WSAEWOULDBLOCK)
{
closesocket(sock);
return NULL;
}
} //select 模型,即设置超时
FD_ZERO(&r);
FD_SET(sock, &r);
timeout.tv_sec = 0; //连接超时0秒
timeout.tv_usec = 700;
if(select(0, 0, &r, 0, &timeout) <= 0)
{
closesocket(sock);
return NULL;
} lphost = gethostbyaddr((const char *)&(server.sin_addr), 4, AF_INET);
closesocket(sock); return lphost;
}