// This method is invoked when an asynchronous receive operation completes. // If the remote host closed the connection, then the socket is closed. // private void process_receive(SocketAsyncEventArgs e) { // check if the remote host closed the connection CUserToken token = e.UserToken as CUserToken; if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { try { token.on_receive(e.Buffer, e.Offset, e.BytesTransferred); } catch (Exception exception) { Console.WriteLine(exception.Message); Console.WriteLine(exception.StackTrace); token.disconnect(); return; } // Keep receive. bool pending = token.socket.ReceiveAsync(e); if (!pending) { // Oh! stack overflow?? process_receive(e); } } else { //Console.WriteLine(string.Format("error {0}, transferred {1}", e.SocketError, e.BytesTransferred)); close_clientsocket(token); } }
// This method is invoked when an asynchronous receive operation completes. // If the remote host closed the connection, then the socket is closed. // private void process_receive(SocketAsyncEventArgs e) { CUserToken token = e.UserToken as CUserToken; if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { token.on_receive(e.Buffer, e.Offset, e.BytesTransferred); // Keep receive. bool pending = token.socket.ReceiveAsync(e); if (!pending) { // Oh! stack overflow?? process_receive(e); } } else { try { token.close(); } catch (Exception) { Console.WriteLine("Already closed this socket."); } } }
// This method is invoked when an asynchronous receive operation completes. // If the remote host closed the connection, then the socket is closed. // private void process_receive(SocketAsyncEventArgs e) { // check if the remote host closed the connection CUserToken token = e.UserToken as CUserToken; if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { token.on_receive(e.Buffer, e.Offset, e.BytesTransferred); bool pending = token.socket.ReceiveAsync(e); if (!pending) { // Oh! stack overflow?? process_receive(e); } } else { Console.WriteLine(string.Format("error {0}, transferred {1}", e.SocketError, e.BytesTransferred)); close_clientsocket(token); } }
private void process_receive(SocketAsyncEventArgs e) { CUserToken token = e.UserToken as CUserToken; if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { // 이후의 작업은 CUserToken에 맡긴다. token.on_receive(e.Buffer, e.Offset, e.BytesTransferred); // 패킷 덩어리 만듭니다. // 다음 메시지 수신을 위해서 다시 Rece_Async 매소드 호출 bool pending = token.socket.ReceiveAsync(e); if (!pending) { process_receive(e); } } else { Console.WriteLine(string.Format("error {0}, transferred {1}", e.SocketError, e.BytesTransferred)); close_clientsocket(token); } }