示例#1
0
        internal static unsafe (SocketError socketError, int bytesTransferred) SendMsg(SafeSocketHandle handle, msghdr *msghdr)
        {
            int         bytesTransferred;
            SocketError socketError;

            int fd = handle.DangerousGetHandle().ToInt32(); // TODO: make safe
            int rv;

            do
            {
                rv = (int)sendmsg(fd, msghdr, 0);
            } while (rv == -1 && errno == EINTR);

            if (rv < 0)
            {
                bytesTransferred = 0;
                socketError      = GetSocketErrorForErrno(errno);
            }
            else
            {
                bytesTransferred = rv;
                socketError      = SocketError.Success;
            }

            return(socketError, bytesTransferred);
        }
示例#2
0
            internal static InnerSafeCloseSocket Accept(SafeSocketHandle socketHandle, byte[] socketAddress, ref int socketAddressSize)
            {
                InnerSafeCloseSocket result = Interop.Winsock.accept(socketHandle.DangerousGetHandle(), socketAddress, ref socketAddressSize);

                if (result.IsInvalid)
                {
                    result.SetHandleAsInvalid();
                }
                return(result);
            }