C# 我可以在C中调用Socket.beginacept多少次

C# 我可以在C中调用Socket.beginacept多少次,c#,.net,sockets,C#,.net,Sockets,我来自Java编程语言。我刚刚开始我的冒险与C和.Net。 我正在使用基于Microsoft示例的C语言创建一个服务器套接字应用程序。 这是上面页面中的示例代码: while (true) { // Set the event to nonsignaled state. allDone.Reset(); // Start an asynchronous socket to listen for connections. Console.WriteLine

我来自Java编程语言。我刚刚开始我的冒险与C和.Net。 我正在使用基于Microsoft示例的C语言创建一个服务器套接字应用程序。 这是上面页面中的示例代码:

while (true)
{
    // Set the event to nonsignaled state.  
    allDone.Reset();

    // Start an asynchronous socket to listen for connections.  
    Console.WriteLine("Waiting for a connection...");
    listener.BeginAccept(
        new AsyncCallback(AcceptCallback),
        listener);

    // Wait until a connection is made before continuing.  
    allDone.WaitOne();
}
。。。其中allDone是在类范围中定义的ManualResetEvent。 我不明白listener.beginacept实际上是做什么的。例如,如果我不调用方法allDone.WaitOne来等待连接建立,那么会发生什么-对listener.beginacept方法的调用会在循环内成功执行多少次,直到它开始等待,或者可能最终会崩溃。我可能遗漏了什么。有人能给我解释一下吗

问候,


Janusz

这里的目的是让AcceptCallback方法在接受连接时设置allDone事件。然后,循环可以继续接受另一个传入连接,而刚刚接受的连接继续执行它需要执行的任何操作

在调用BeginAccept之后,如果您有任何有意义的工作,您可以在侦听线程上完成其他有用的工作


奇怪的是,文档中没有明确指出,如果您不等待就反复调用BeginAccept,我可以找到结果,但我的建议是不要这样做。

这是传统的异步机制。BeginAccept异步启动accept并立即返回。因此,如果忽略WaitOne,它将一直旋转直到出现异常。照目前的情况,我猜MRE将在AcceptCallback中设置,当客户端尝试连接时,将调用AcceptCallback。我建议使用任务异步模式来支持这种过时的机制。无法再删除最后一句。我原以为socket会有一个任务异步API,但现在没有了。谢谢你的回复。那么你建议用什么来代替微软的例子呢?这个例子很好,我认为,作为一个指导原则,只要保留事件逻辑就行了。C语言中的服务器套接字是否有更好的API,或者这是唯一的API?