我采用的是 non blocking模式,每次连接的时候都会print 10035,我尝试了如下方法
1.重新连接也是还是 10035
2.改成阻塞模式实在是太慢
3.用select 好像只能处理 10036的情况不知道如何处理,请高手赐教!(最好有代码结构)以下是我的代码结构://链表的定义
Struct SockAddrList{
sockaddr_in addr;
SockAddrList* next;
};
//......
SockAddrList node = m_head;
SOCKET sk;
for( ;node; node=node->next){//个数在100个左右
sk = socket(AF_INET,SOCK_STREAM,0);
unsigned long val = 1;
ioctl(sk,FIONBIO,&val);//设为non blocking
r=connect(sk,(struct sockaddr*)&node->addr,sizeof(struct sockaddr)); if(r==-1)
{
printf("error code: %d",GetLastError()==10035);
}
else
{
//send message
}
}
1.重新连接也是还是 10035
2.改成阻塞模式实在是太慢
3.用select 好像只能处理 10036的情况不知道如何处理,请高手赐教!(最好有代码结构)以下是我的代码结构://链表的定义
Struct SockAddrList{
sockaddr_in addr;
SockAddrList* next;
};
//......
SockAddrList node = m_head;
SOCKET sk;
for( ;node; node=node->next){//个数在100个左右
sk = socket(AF_INET,SOCK_STREAM,0);
unsigned long val = 1;
ioctl(sk,FIONBIO,&val);//设为non blocking
r=connect(sk,(struct sockaddr*)&node->addr,sizeof(struct sockaddr)); if(r==-1)
{
printf("error code: %d",GetLastError()==10035);
}
else
{
//send message
}
}
解决方案 »
- MFC中用Tab Control控件实现类似浏览器一样的选项卡可拖动并可关闭
- VC ipx协议通信编程,谁知道啊?
- 如何获得整型数据的为字串时的长度?
- ----||||||--------- 关于 std::string 的简单问题 (:
- 移动窗体
- 画图程序中,如何实现橡皮筋效果????
- 高分请教
- ##########快给我一个vc写的最简单的activeX 急!!!! (在线等待)#######
- 请问谁在2000和nt下做过替换wsock.dll的操作???请执教以下。
- 3万-4万元开发一个数据库应用系统
- 如何实现一次性执行多条插入语句(插入是调用存储过程,插入操作可能调用多个存储过程)?
- 发两个界面小程序
for (i = 0; i < TotalSockets; i++)
FD_SET(SocketArray[i]->Socket, &ReadSet);
if ((Total = select(0, &ReadSet, NULL, NULL, NULL)) == SOCKET_ERROR)
{
printf("select() returned with error %d\n", WSAGetLastError());
return;
}
WSAEWOULDBLOCK(10035)表示一个操作会导致阻塞
没有研究过第一个操作,不知道是不是在完成端口时遇到的:)
后者只要一个网络操作无法立刻完成,就是这样
1. select时 要不要 用循环即,只用一次select, SocketArray[i]中的socket是不是都能 连接好? for (i = 0; i < TotalSockets; i++)
FD_SET(SocketArray[i]->Socket, &ReadSet);
if ((Total = select(0, &ReadSet, NULL, NULL, NULL)) == SOCKET_ERROR)
{
for (i = 0; i < TotalSockets; i++)
if( FD_ISSET(SocketArray[i]->Socket),ReadSet) )
//......;
}2. select是同步的吗,他是有socket在 ReadSet里就返回,还是需要等待 直到设置的时间达到 后再返回
2:需要等待,最后一个参数是个时间控制结构体,具体参考MSDN.