+ -
当前位置:首页 → 问答吧 → IOCP中关于disconnectex重用Socket的问题

IOCP中关于disconnectex重用Socket的问题

时间:2011-11-29

来源:互联网

现在我使用acceptex,disconnectex重用Socket,但在使用CreateIoCompletionPort重新绑定Socket时出现错误,返回一个87错误;我在网上找了下,说这是正常的,但是有个问题,我发现使用的完成键(CompletionKey),还是以前的完成键。
想在这里请教一下这方面的高手:1.我可以重新绑定完成键吗?2.要是不能不能重新绑定,那这个应该怎么做呢?先谢了!

作者: luodongjue   发布时间: 2011-11-29

自己先顶下啊

作者: luodongjue   发布时间: 2011-11-29

你理解错,disconnectex重用Socket 后 无需重新绑定.

作者: bingying19872008   发布时间: 2011-11-29

C/C++ code

void IssueReset()
{
   myState = WAIT_RESET; //标记操作类型
   TransmitFile( mySock, 0, 0, 0, this, 0,TF_DISCONNECT | TF_REUSE_SOCKET );//重用
}

void OnIoComplete(DWORD NumTransferred)
{
    switch ( myState )
    {
       case WAIT_RESET:
            CompleteReset();
            break;
    }
}

void CompleteReset(void)
{
   IssueAccept();
}

    void IssueAccept()
    {   
        myState = WAIT_ACCEPT;
        DWORD ReceiveLen = 0; // This gets thrown away, but must be passed.
        AcceptEx( myListener, mySock, myAddrBlock, 0, ACCEPT_ADDRESS_LENGTH, 
            ACCEPT_ADDRESS_LENGTH, &ReceiveLen, this );
    }

作者: bingying19872008   发布时间: 2011-11-29

可以搜索 "精巧的WEB服务器Fire的源代码"

作者: bingying19872008   发布时间: 2011-11-29