54 lines
1.4 KiB
C#
54 lines
1.4 KiB
C#
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Microsoft Research Singularity
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using System.Collections;
|
|
|
|
namespace NetStack.Runtime
|
|
{
|
|
public class TcpSessionPool
|
|
{
|
|
static TcpModule tcpModule;
|
|
static ArrayList tcpSessions = new ArrayList();
|
|
|
|
static long allocations;
|
|
static long getCalls;
|
|
static long recycleCalls;
|
|
|
|
public static void SetTcpModule(TcpModule m)
|
|
{
|
|
tcpModule = m;
|
|
}
|
|
|
|
public static TcpSession! Get()
|
|
{
|
|
lock (tcpSessions) {
|
|
getCalls++;
|
|
foreach (TcpSession! ts in tcpSessions) {
|
|
if (ts.IsClosed) {
|
|
Core.Instance().DeregisterSession(ts.Protocol, ts);
|
|
tcpSessions.Remove(ts);
|
|
return tcpModule.ReInitializeSession(ts);
|
|
}
|
|
}
|
|
allocations++;
|
|
}
|
|
|
|
return new TcpSession(tcpModule);
|
|
}
|
|
|
|
public static void Recycle(TcpSession! ts)
|
|
{
|
|
lock (tcpSessions) {
|
|
recycleCalls++;
|
|
tcpSessions.Add(ts);
|
|
}
|
|
}
|
|
}
|
|
}
|