各位大虾,
在下遇到了一个有关select的问题。
当我写了一个
DWORD dwRet;
while(1)
{
SOCKET sk1,sk2;
// sk2,and sk1 已经创建成功,并绑定相应地址。
fd_set ReadSet;
FD_ZERO(&ReadSet);
FD_SET(sk1, &ReadSet);
FD_SET(sk2, &ReadSet);
dwRet = select(0, &ReadSet,NULL,NULL,NULL);
if(dwRet == SOCK_ERROR)
      break;
else //起一个线程
...}
while第一次循环是对的,第二次就报错了:error:10038。
我不知道哪个socket会突然变样了,我不曾有过关闭动作。
两个socket我只在析构中释放了。
专家请帮我把把脉,谢谢。

解决方案 »

  1.   

    while第一次循环是对的,第二次就报错了。
    应该是线程中间有对sk1,sk2的操作。
      

  2.   

    while第一次循环是对的,第二次就报错了。
    应该是线程中间有对sk1,sk2的操作。而线程结束的时间在析构函数调用之后。
    线程在什么时候结束?
      

  3.   

    你的sk1, sk2都是while{}内的局部变量, 执行一次就被释放了, 再进入循环后是重新分配的新的sk1, sk2 ...