完成端口是异步进行的。这样会不会出现下面的问题:
一个线程调用WSARecv()函数,并对扩展的OVERLAPPED结构即OVERLAPPEDPLUS的其余部分内容进行改写,比如把一个标志字节改为RECV.
同时另一个线程调用WSAsend(),并把OVERLAPPEDPLUS的标志字节改写为SEND.
由于两个线程用的是同一个OVERLAPPEDPLUS结构,这样会不会引起混乱呢?
如果我用send()呢?GetQueuedCompletionStatus()能捕捉到它吗?

解决方案 »

  1.   

    为什么要共用一个OVERLAPPED 结构。功用一个结构会出问题的。我的做法是在投递操作的时候动态申请OVERLAPPED内存。然后在操作结束后释放。
      

  2.   

    那用send()呢?GetQueuedCompletionStatus()能捕捉到它吗?
      

  3.   

    分开用吧,再申请一个OVERLAPPED结构。
      

  4.   

    读和写应该分别投递不同的 overlapped 结构体
      

  5.   

    公用你不就不能同时recv 和 read了!必须互斥这个结构