1

SocketAsyncEventArgsを使用していますが、1秒あたり数回の受け入れしか実行できません(理由はわかりません)。

1秒あたりの承認数を最大化するにはどうすればよいですか?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);
    }
}
4

1 に答える 1

0

デフォルトでは接続制限があります。DefaultConnectionLimit http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspxを使用して変更できます 。

于 2012-11-04T19:10:31.200 に答える