如果WaitOne()仍然阻塞,那么在套接字编程中异步Accept()有什么意义?看例子

时间:2019-06-13 16:12:22

标签: c# sockets asynchronous tcp blocking

Microsoft提供的该示例围绕异步套接字编程。但是,当它调用异步函数BeginAccept时,它将随后到达WaitOne(),无论如何它都等待BeginAccept完成。

    // Bind the socket to the local endpoint and listen for incoming connections.  
    try {  
        listener.Bind(localEndPoint);  
        listener.Listen(100);  

        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();  
        }  

    } catch (Exception e) {  
        Console.WriteLine(e.ToString());  
    }  

    Console.WriteLine("\nPress ENTER to continue...");  
    Console.Read();  
}  

当您基本上立即遭到阻止时,使用非阻止版本的Accept有什么意义?在BeginAccept运行回调函数之前,如何修改此版本以允许我执行其他操作?我是C#的新手,所以我迷失了。我来自C语言,可能会通过分叉侦听器来解决此问题。

编辑:这是示例

https://docs.microsoft.com/en-us/dotnet/framework/network-programming/asynchronous-server-socket-example

0 个答案:

没有答案