疑问在代码后面已经注释出来了,这之前的创建socket是没问题的//设置为非阻塞模式 while ( TRUE)
{
FD_ZERO(&fdread);
FD_SET(comm_socket,&fdread); ret = select(0,&fdread, NULL,NULL,&tmOut); //--为什么这里总是返回 0了? DWORD r = WSAGetLastError(); if ( ret == SOCKET_ERROR)
{
return FALSE ;
}
else
{
int rct ;
rct = connect(comm_socket, (sockaddr*)&comm_addr, len); //--为什么这里也总是返回0了 DWORD rr = WSAGetLastError(); if ( rct == SOCKET_ERROR)
{
return FALSE ;
}
}
}
{
FD_ZERO(&fdread);
FD_SET(comm_socket,&fdread); ret = select(0,&fdread, NULL,NULL,&tmOut); //--为什么这里总是返回 0了? DWORD r = WSAGetLastError(); if ( ret == SOCKET_ERROR)
{
return FALSE ;
}
else
{
int rct ;
rct = connect(comm_socket, (sockaddr*)&comm_addr, len); //--为什么这里也总是返回0了 DWORD rr = WSAGetLastError(); if ( rct == SOCKET_ERROR)
{
return FALSE ;
}
}
}
解决方案 »
- 输入汉字,然后删除,为什么会留下残影?
- 获取数据库的表名并交其放入combobox的下拉列表中。程序无错,就是无法实现该功能,求大神指点。
- 在其它程序窗口实现输入
- 窗口跟视口!
- 谁能读懂这个程序(绝对可以编译通过的)。
- 在RichEdit中如何实现象QQ那样的效果?
- 视图中作图,如何能画在状态栏上??????????????????
- 一个用普通函数重载函数模板的程序,怎么改都编译不过:( 请教>>>>
- 关于ClistCtrl中得HDN_ITEMCLICK消息
- 这个函数如何完成 OnNotify(...) ?
- 请教虚函数问题
- win32 SDK中使用 msado15.dll的问题! 静态导入?!
timeval tmOut ;
tmOut.tv_sec = 2;
tmOut.tv_usec = 0;
这是因为接收缓冲区里没有任何东西
readfds
■ 有数据可以读入。
■ 连接已经关闭、重设或中止。
■ 假如已调用了listen,而且一个连接正在建立,那么accept函数调用会成功。writefds
■ 有数据可以发出。
■ 如果已完成了对一个非锁定连接调用的处理,连接就会成功。connect是写在主线程的,在select等待connect的结果,而且等结果要用writefds天!!
你把connect写这里了,还要Select做啥?
CSDN有下
http://download.csdn.net/source/571827
在线程里发消息给自己,(也就是自己模仿select的功能),再看书就容易多啦
2. 如果你在第一次调用到connect时,返回0, 说明不是非阻塞状态,你之前的非阻塞设置有问题. 非阻塞的connect一定会返回错误,这时要判断错误值是不是WSAEWOULDBLOCK另外,非阻塞的connect是否成功要用select的writefs来判断.
你能帮我修改一下这段我写的很差劲的代码吗 谢谢你
//设置为非阻塞模式 while ( TRUE)
{
FD_ZERO(&fdread);
FD_SET(comm_socket,&fdread); ret = select(0,&fdread, NULL,NULL,&tmOut); //--为什么这里总是返回 0了? DWORD r = WSAGetLastError(); if ( ret == SOCKET_ERROR)
{
return FALSE ;
}
else
{
int rct ;
rct = connect(comm_socket, (sockaddr*)&comm_addr, len); //--为什么这里也总是返回0了 DWORD rr = WSAGetLastError(); if ( rct == SOCKET_ERROR)
{
return FALSE ;
}
}
}
int ret = ioctlsocket(SockFD, FIONBIO, (unsigned long*)&ul);
if(ret==SOCKET_ERROR)
return FALSE;