SocketAsyncEventArgs和每秒几个接受

时间:2012-11-04 14:53:31

标签: c# sockets asynchronous socketasynceventargs

我正在使用SocketAsyncEventArgs,我每秒只能执行几次接受(我不知道为什么)。

如何最大限度地提高每秒接受次数?我应该多次调用Accept(null)吗?

代码: 在监听套接字上调用Listen后,我调用Accept(null),这是我的代码:

void Accept(SocketAsyncEventArgs acceptEventArg)
{
    if (acceptEventArg == null)
    {
        acceptEventArg = new SocketAsyncEventArgs();
        acceptEventArg.Completed += AcceptCompleted;
    }
    else
    {
        // socket must be cleared since the context object is being reused
        acceptEventArg.AcceptSocket = null;
    }

    bool willRaiseEvent = _listener.AcceptAsync(acceptEventArg);
    if (!willRaiseEvent)
    {
        Accepted(acceptEventArg);
    }
}

void AcceptCompleted(object sender, SocketAsyncEventArgs e)
{
    if (_onAccepted != null) _onAccepted(e);
}

void Accepted(SocketAsyncEventArgs e)
{
    if (!e.AcceptSocket.Connected) return;

    //1
    var acceptSocket = e.AcceptSocket;
    var readEventArgs = CreateArg(null, e.AcceptSocket, null);

    bool willRaiseEvent = true;
    if (acceptSocket.Connected)
        willRaiseEvent = acceptSocket.ReceiveAsync(readEventArgs);

    //2
    Accept(e);

    //3
    if (!willRaiseEvent)
    {
        Received(readEventArgs);
    }
}

1 个答案:

答案 0 :(得分:0)

默认情况下存在连接限制。您可以使用DefaultConnectionLimit更改它 http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx