Beispiel #1
0
        public bool Poll(int microSeconds, System.Net.Sockets.SelectMode mode)
        {
            if (_isClosed)
            {
                throw new ObjectDisposedException("Socket has been closed");
            }
            zts_pollfd poll_set = new zts_pollfd();

            poll_set.fd = _fd;
            if (mode == SelectMode.SelectRead)
            {
                poll_set.events = (short)((byte)ZeroTier.Constants.POLLIN);
            }
            if (mode == SelectMode.SelectWrite)
            {
                poll_set.events = (short)((byte)ZeroTier.Constants.POLLOUT);
            }
            if (mode == SelectMode.SelectError)
            {
                poll_set.events = (short)((byte)ZeroTier.Constants.POLLERR | (byte)ZeroTier.Constants.POLLNVAL);
            }
            IntPtr poll_fd_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(zts_pollfd)));

            Marshal.StructureToPtr(poll_set, poll_fd_ptr, false);
            int  result     = 0;
            int  timeout_ms = (microSeconds / 1000);
            uint numfds     = 1;

            if ((result = zts_bsd_poll(poll_fd_ptr, numfds, timeout_ms)) < 0)
            {
                throw new SocketException(result, Node.ErrNo);
            }
            poll_set = (zts_pollfd)Marshal.PtrToStructure(poll_fd_ptr, typeof(zts_pollfd));
            if (result != 0)
            {
                if (mode == SelectMode.SelectRead)
                {
                    result = Convert.ToInt32(((byte)poll_set.revents & (byte)ZeroTier.Constants.POLLIN) != 0);
                }
                if (mode == SelectMode.SelectWrite)
                {
                    result = Convert.ToInt32(((byte)poll_set.revents & (byte)ZeroTier.Constants.POLLOUT) != 0);
                }
                if (mode == SelectMode.SelectError)
                {
                    result = Convert.ToInt32(
                        ((poll_set.revents & (byte)ZeroTier.Constants.POLLERR) != 0) ||
                        ((poll_set.revents & (byte)ZeroTier.Constants.POLLNVAL) != 0));
                }
            }
            Marshal.FreeHGlobal(poll_fd_ptr);
            return(result > 0);
        }
Beispiel #2
0
        public bool Poll(int microSeconds, System.Net.Sockets.SelectMode mode)
        {
#if SECURE_BLACKBOX_DEBUG
            LowLevelDump("ElSSLSocket.Poll() {}");
#endif
            if (receivedDataBuf != null)
            {
                return(true);
            }
            else
            {
                return(transport.Poll(microSeconds, mode));
            }
        }
Beispiel #3
0
 public bool SafePoll(int timeout, ns.SelectMode sm)
 {
     lock (this)
     {
         bool res = false;
         try
         {
             res = !disposed && Poll(timeout, sm);
         }
         catch (Exception e)
         {
             Console.WriteLine(e);
             res = !disposed && sm == ns.SelectMode.SelectError;
         }
         return(res);
     }
 }
Beispiel #4
0
        public bool SafePoll(int timeout, ns.SelectMode sm)
        {
            bool res = false;

            try
            {
                if (!disposed)
                {
                    res = realSocket.Poll(timeout, sm);
                }
            }
            catch (ns.SocketException e)
            {
                ROS.Error()($"[{ThisNode.Name}] {e.ToString()}");
                res = !disposed && sm == ns.SelectMode.SelectError;
            }
            return(res);
        }
Beispiel #5
0
        public bool SafePoll(int timeout, ns.SelectMode sm)
        {
            bool res = false;

            try
            {
                if (!disposed)
                {
                    res = realsocket.Poll(timeout, sm);
                }
            }
            catch (ns.SocketException e)
            {
                EDB.WriteLine(e);
                res = !disposed && sm == ns.SelectMode.SelectError;
            }
            return(res);
        }
Beispiel #6
0
        public bool SafePoll(int timeout, ns.SelectMode sm)
        {
            if (disposed)
            {
                return(false);
            }
            bool res = false;

            try
            {
                res = Poll(timeout, sm);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                res = sm == ns.SelectMode.SelectError;
            }
            return(res);
        }
Beispiel #7
0
 bool Utils.Wrappers.Interfaces.ISocket.Poll(int microSeconds, System.Net.Sockets.SelectMode mode)
 {
     return(InternalSocket.Poll(microSeconds, mode));
 }