char sb[500]= {0}, rst;
  gethostname(sb, 500);
send(svr_conn,sb,strlen(sb),0);
  sb[0] = '\01';
send(svr_conn,sb,1,0);
  recv(svr_conn, &rst, 1, 0);//或者read(svr_conn,&rst,1);
其中svr_conn = socket(AF_INET, SOCK_STREAM, 0);有一段代码如上,在linux下最后一行是read(),现在移植到windows下,我将read()改成了recv(),但是程序每次运行到这就停在这,如果我在recv()前加上
  flags = 1;
  ioctlsocket(svr_conn, FIONBIO, &flags);
  n = recv(svr_conn, &rst, 1, 0);
设置非阻塞,那么recv()返回值n为-1,还是没读取,现在不知该怎么办,求住了csdn大侠,大侠说可以使用一个独立的线程一直接收消息,不在主线程中处理,但是不知该怎么做,使用独立的线程处理是用CreateThread()创建线程吗,那我创建了线程后我该怎样和程序中socket()创建的套接字svr_conn联系起来呢,recv()是应该放在ThreadFunc()调用?

解决方案 »

  1.   

    创建线程:CreateThread
    HANDLE CreateThread(  LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD
      SIZE_T dwStackSize,                       // initial stack size
      LPTHREAD_START_ROUTINE lpStartAddress,    // thread function
      LPVOID lpParameter,  // thread argument 通过这个传递参数
      DWORD dwCreationFlags,                    // creation option
      LPDWORD lpThreadId                        // thread identifier);是的,在ThreadFunc()调用
      

  2.   

    直接把socket套接字svr_conn传递进去吗?还是传递什么
      

  3.   

    WIndows下可以用WSAAsyncSelect,WSAAsyncEvent等异步IO模型,当然这些模型肯定涉及线程了,找相关的书研究研究吧。