private async Task HandleMetadataAsync(CancellationToken cancelToken)
        {
            if (!shoutcastStream.serverSettings.RequestSongMetdata)
            {
                return;
            }

            cancelToken.ThrowIfCancellationRequested();

            if (metadataPos == shoutcastStream.metadataInt)
            {
                metadataPos = 0;

                await socket.LoadAsync(1);

                if (socket.UnconsumedBufferLength > 0)
                {
                    uint metaInt = await socket.ReadByteAsync();

                    if (metaInt > 0)
                    {
                        try
                        {
                            uint metaDataInfo = metaInt * 16;

                            cancelToken.ThrowIfCancellationRequested();

                            await socket.LoadAsync((uint)metaDataInfo);

                            var metadata = await socket.ReadStringAsync((uint)metaDataInfo);

                            ParseSongMetadata(metadata);
                        }
                        catch (Exception e)
                        {
                            throw new Exception("Error occurred while parsing metadata.", e);
                            //if (e is System.ArgumentOutOfRangeException || e is NullReferenceException)
                            //{
                            //    //No mapping for the Unicode character exists in the target multi-byte code page.

                            //    shoutcastStream.MediaStreamSource.MusicProperties.Title = "Unknown Song";
                            //    shoutcastStream.MediaStreamSource.MusicProperties.Artist = "Unknown Artist";

                            //    shoutcastStream.RaiseMetadataChangedEvent(new ShoutcastMediaSourceStreamMetadataChangedEventArgs()
                            //    {
                            //        Title = "Unknown Song",
                            //        Artist = "Unknown Artist"
                            //    });
                            //}
                        }
                    }

                    cancelToken.ThrowIfCancellationRequested();

                    //byteOffset = 0;
                }
            }
        }