Ros_CSharp.TcpTransport.read C# (CSharp) Method

read() public method

public read ( byte buffer, int pos, int length ) : int
buffer byte
pos int
length int
return int
        public int read(byte[] buffer, int pos, int length)
        {
            ScopedTimer.Ping();
            lock (close_mutex)
            {
                if (closed)
                    return -1;
            }
            int num_bytes = 0;
            SocketError err;
            num_bytes = sock.realsocket.Receive(buffer, pos, length, SocketFlags.None, out err);
            if (num_bytes < 0)
            {
                if (err == SocketError.TryAgain || err == SocketError.WouldBlock)
                    num_bytes = 0;
                else if (err != SocketError.InProgress && err != SocketError.IsConnected && err != SocketError.Success)
                {
                    close();
                    num_bytes = -1;
                }
            }
            return num_bytes;
        }

Usage Example

Example #1
0
 private void readTransport()
 {
     //EDB.WriteLine("READ - "+transport.poll_set);
     if (dropped || reading)
     {
         return;
     }
     lock (read_mutex)
     {
         reading = true;
         ReadFinishedFunc callback;
         uint             size;
         while (!dropped && read_callback != null)
         {
             if (read_buffer == null || read_callback == null)
             {
                 throw new Exception("YOU SUCK!");
             }
             uint to_read = read_size - read_filled;
             if (to_read > 0)
             {
                 int bytes_read = transport.read(ref read_buffer, read_filled, to_read);
                 if (dropped)
                 {
                     return;
                 }
                 if (bytes_read < 0)
                 {
                     callback      = read_callback;
                     read_callback = null;
                     byte[] buffer = read_buffer;
                     read_buffer = null;
                     size        = read_size;
                     read_size   = 0;
                     read_filled = 0;
                     callback(this, ref buffer, size, false);
                     break;
                 }
                 read_filled += (uint)bytes_read;
             }
             else
             {
                 break;
             }
             if (read_filled == read_size && !dropped)
             {
                 callback = read_callback;
                 size     = read_size;
                 byte[] buffer = read_buffer;
                 read_buffer   = null;
                 read_callback = null;
                 read_size     = 0;
                 callback(this, ref buffer, size, true);
             }
             else
             {
                 break;
             }
         }
         if (read_callback == null)
         {
             transport.disableRead();
         }
         reading = false;
     }
 }
All Usage Examples Of Ros_CSharp.TcpTransport::read