public int Read(byte[] buffer, int offset, int count)
        {
            CheckOpen();
            if (buffer == null)
            {
                throw new ArgumentNullException("buffer");
            }
            if (offset < 0 || count < 0)
            {
                throw new ArgumentOutOfRangeException("offset or count less than zero.");
            }

            if (buffer.Length - offset < count)
            {
                throw new ArgumentException("offset+count",
                                            "The size of the buffer is less than offset + count.");
            }

            try
            {
                return(stream.Read(buffer, offset, count));
            }
            catch (IOException)
            {
                is_open = false;
                throw;
            }
        }
        private byte[] ReadCurrentReceiveBuffer(int numberOfBytes)
        {
            var result     = new byte[numberOfBytes];
            var retrieved  = 0;
            var retryCount = 0;

            try
            {
                while (retrieved < numberOfBytes && retryCount++ < 4)
                {
                    retrieved += serialStream.Read(result, retrieved, numberOfBytes - retrieved);
                }
            }
            catch (Exception e)
            {
            }
            if (retrieved < numberOfBytes)
            {
                //logger.Info("Ended up reading short (expected {0} bytes, got only {1})...",
                //    numberOfBytes, retrieved);
            }
            return(result);
        }