示例#1
0
        /// <summary>
        /// Tries to initialize the Registered I/O handle.
        /// </summary>
        /// <param name="socket">A descriptor that identifies a socket.</param>
        /// <param name="result">Contains valid object if operation was successful, <c>null</c> otherwise.</param>
        /// <returns><c>true</c> if operation was successful, <c>false</c> otherwise.</returns>
        public static unsafe Boolean TryCreate(SOCKET socket, out RIOHandle result)
        {
            // get function table id
            var functionTableId = WinsockInterop.WSAID_MULTIPLE_RIO;

            // initialize functions table
            var functionTable = new RIO_EXTENSION_FUNCTION_TABLE();

            // get table size
            var tableSize = (UInt32)sizeof(RIO_EXTENSION_FUNCTION_TABLE);

            // will contain actual table size
            UInt32 actualTableSize;

            // try get registered IO functions table
            var tryGetTableResult = WinsockInterop.WSAIoctl(socket, WinsockInterop.SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER, &functionTableId, 16, &functionTable, tableSize, out actualTableSize, IntPtr.Zero, IntPtr.Zero);

            // check if attempt was successful
            if (tryGetTableResult == WinsockInterop.SOCKET_ERROR)
            {
                result = null;

                // return fail
                return(false);
            }

            // create registered I/O handle
            result = new RIOHandle(ref functionTable);

            // return success
            return(true);
        }
示例#2
0
		/// <summary>
		/// Initializes a new instance of the <see cref="TcpWorker" /> class.
		/// </summary>
		private TcpWorker(UIntPtr serverSocket, RIOHandle rioHandle, IocpWorker[] workers)
		{
			this.serverSocket = serverSocket;

			this.rioHandle = rioHandle;

			this.workers = workers;
		}
示例#3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TcpWorker" /> class.
        /// </summary>
        private TcpWorker(UIntPtr serverSocket, RIOHandle rioHandle, IocpWorker[] workers)
        {
            this.serverSocket = serverSocket;

            this.rioHandle = rioHandle;

            this.workers = workers;
        }
示例#4
0
 public void Stop()
 {
     t.Abort();
     t = null;
     socket.Close();
     socket    = null;
     listening = false;
 }
示例#5
0
		public TcpConnection(SOCKET socket, IntPtr requestQueue)
		{
			this.socket = socket;

			this.requestQueue = requestQueue;

			// create request queue
			//var rq = rioHandle.CreateRequestQueue(socket, 24, 1, 24, 1, )
		}
示例#6
0
 public void Dispose()
 {
     socket          = null;
     Address         = null;
     UID             = null;
     lvi             = null;
     t               = null;
     KeyboardCountry = null;
 }
示例#7
0
        public TcpConnection(SOCKET socket, IntPtr requestQueue)
        {
            this.socket = socket;

            this.requestQueue = requestQueue;

            // create request queue
            //var rq = rioHandle.CreateRequestQueue(socket, 24, 1, 24, 1, )
        }
示例#8
0
        // Z:\jsc.svn\examples\c\android\NDKUdpClient\xNativeActivity.cs
        // Z:\jsc.svn\examples\c\android\Test\TestNDKUDP\TestNDKUDP\xNativeActivity.cs

        public __UdpClient(int port)
        {
            ConsoleExtensions.tracei("enter UdpClient port: ", port);

            this.port = (ushort)port;
            this.s    = socket_h.socket(socket_h.AF_INET, socket_h.SOCK_DGRAM, socket_h.IPPROTO_UDP);

            ConsoleExtensions.tracei("socket ", (int)s);
        }
示例#9
0
        // Z:\jsc.svn\examples\c\android\NDKUdpClient\xNativeActivity.cs
        // Z:\jsc.svn\examples\c\android\Test\TestNDKUDP\TestNDKUDP\xNativeActivity.cs

        public __UdpClient(int port)
        {
            ConsoleExtensions.tracei("enter UdpClient port: ", port);

            this.port = (ushort)port;
            this.s = socket_h.socket(socket_h.AF_INET, socket_h.SOCK_DGRAM, socket_h.IPPROTO_UDP);

            ConsoleExtensions.tracei("socket ", (int)s);

        }
示例#10
0
文件: socket.cs 项目: wclwksn/code
        //__socketcall int bind(int, const struct sockaddr *, int);


        //__socketcall ssize_t recvfrom(int, void*, size_t, unsigned int, const struct sockaddr *, socklen_t*);
        public unsafe static int recvfrom(
            this SOCKET s,
            byte *buf,
            int len,
            uint flags,
            sockaddr *from,
            int *fromlen
            )
        {
            return(default(int));
        }
示例#11
0
        static int Main()
        {
            if (!File.Exists("XPlugin.dll"))
            {
                File.WriteAllBytes("XPlugin.dll", Net_Weave_R.Properties.Resources.XPlugin);
                File.WriteAllBytes("Mono.Cecil.dll", Net_Weave_R.Properties.Resources.Mono_Cecil);
                Application.Restart();
                return(1);
            }

            if (!File.Exists("Mono.Cecil.dll"))
            {
                File.WriteAllBytes("Mono.Cecil.dll", Net_Weave_R.Properties.Resources.Mono_Cecil);
                Application.Restart();
                return(1);
            }

            xMutex mutex = xMutex.CreateMutex("Net-Weave R");

            if (mutex == null)
            {
                MessageBox.Show("An instance of Net-Weave R is already running.", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(-1);
            }

            if (!SOCKET.Startup())
            {
                MessageBox.Show("Unable to start winsock. Please try again", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(-1);
            }

            GlobalProperties.ConsoleHandle = Process.GetCurrentProcess().MainWindowHandle;
            User32.ShowWindow(GlobalProperties.ConsoleHandle, 0);
            GlobalProperties.ApplicationIcon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if (!Settings.ReadToS())
            {
                MessageBox.Show("This appears to be your first time running Net-Weave R. Please agree to the Terms of Service before continuing.", "First time running", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

                if (!TermsOfService.Show())
                {
                    SOCKET.Cleanup();
                    Environment.Exit(0);
                }
            }

            Application.Run(new Login());
            //SOCKET.Cleanup();

            return(0);
        }
示例#12
0
 public Client(SOCKET sck)
 {
     socket   = sck;
     Address  = sck.Address.ToString().Split(':')[0];
     lvi      = new ListViewItem();
     lvi.Text = Address;
     lvi.Tag  = this;
     UID      = Guid.NewGuid().ToString();
     disNote  = true;
     fullCon  = false;
     pinged   = false;
     alive    = false;
     lastSent = 0;
 }
示例#13
0
 public Client(SOCKET sck)
 {
     socket = sck;
     Address = sck.Address.ToString().Split(':')[0];
     lvi = new ListViewItem();
     lvi.Text = Address;
     lvi.Tag = this;
     UID = Guid.NewGuid().ToString();
     disNote = true;
     fullCon = false;
     pinged = false;
     alive = false;
     lastSent = 0;
 }
示例#14
0
 void accept()
 {
     while (listening)
     {
         SOCKET acc = socket.Accept();
         if (acc != null && listening)
         {
             if (SocketAccepted != null)
             {
                 SocketAccepted(this, new SocketConnectedEventArgs(acc));
             }
         }
         if (!listening)
         {
             break;
         }
     }
 }
示例#15
0
        public bool Listen(int port)
        {
            if (listening)
            {
                return(false);
            }

            socket = new SOCKET(ws2_32.AddressFamily.AF_INET, ws2_32.SocketType.SOCK_STREAM, ws2_32.SocketProtocol.IPPROTO_TCP);
            if (!socket.Bind(port) || !socket.Listen(0))
            {
                socket.Close();
                return(false);
            }
            listening = true;
            t         = new Thread(accept);
            t.Start();
            Port = port;
            return(true);
        }
示例#16
0
        internal TryResult <TcpConnection> TryCreateConnection(SOCKET socket, UInt64 id)
        {
            var maxOutstandingReceive = 10u;

            var maxOutstandingSend = 10u;

            // try create request queue
            var requestQueue = RioHandle.CreateRequestQueue(socket, maxOutstandingReceive, 1, maxOutstandingSend, 1, CompletionQueue, CompletionQueue, id);

            if (requestQueue == WinsockInterop.RIO_INVALID_RQ)
            {
                var errorCode = (WinsockErrorCode)WinsockInterop.WSAGetLastError();

                TryResult <TcpConnection> .CreateFail(errorCode);
            }

            var connection = new TcpConnection(socket, requestQueue);

            // add connection into the collection of the connections
            Connections.TryAdd(id, connection);

            return(TryResult <TcpConnection> .CreateSuccess(connection));
        }
示例#17
0
		/// <summary>
		/// Tries to initialize the Registered I/O handle.
		/// </summary>
		/// <param name="socket">A descriptor that identifies a socket.</param>
		/// <param name="result">Contains valid object if operation was successful, <c>null</c> otherwise.</param>
		/// <returns><c>true</c> if operation was successful, <c>false</c> otherwise.</returns>
		public static unsafe Boolean TryCreate(SOCKET socket, out RIOHandle result)
		{
			// get function table id
			var functionTableId = WinsockInterop.WSAID_MULTIPLE_RIO;

			// initialize functions table
			var functionTable = new RIO_EXTENSION_FUNCTION_TABLE();

			// get table size
			var tableSize = (UInt32) sizeof(RIO_EXTENSION_FUNCTION_TABLE);

			// will contain actual table size
			UInt32 actualTableSize;

			// try get registered IO functions table
			var tryGetTableResult = WinsockInterop.WSAIoctl(socket, WinsockInterop.SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER, &functionTableId, 16, &functionTable, tableSize, out actualTableSize, IntPtr.Zero, IntPtr.Zero);

			// check if attempt was successful
			if (tryGetTableResult == WinsockInterop.SOCKET_ERROR)
			{
				result = null;

				// return fail
				return false;
			}

			// create registered I/O handle
			result = new RIOHandle(ref functionTable);

			// return success
			return true;
		}
示例#18
0
 public static extern Int32 closesocket([In] SOCKET s);
示例#19
0
 public SocketConnectedEventArgs(SOCKET sck)
 {
     AcceptedSocket = sck;
 }
示例#20
0
 public static extern Int32 listen([In] SOCKET s, [In] Int32 backlog);
示例#21
0
 public RIO_RQ CreateRequestQueue([In] SOCKET Socket, [In] ULONG MaxOutstandingReceive, [In] ULONG MaxReceiveDataBuffers, [In] ULONG MaxOutstandingSend, [In] ULONG MaxSendDataBuffers, [In] RIO_CQ ReceiveCQ, [In] RIO_CQ SendCQ, [In] PVOID SocketContext) => createRequestQueue(Socket, MaxOutstandingReceive, MaxReceiveDataBuffers, MaxOutstandingSend, MaxSendDataBuffers, ReceiveCQ, SendCQ, SocketContext);
示例#22
0
		private static Boolean TryConfigureBindAndStartListen(SOCKET serverSocket, TcpServerSettings settings)
		{
			// try disable use of the Nagle algorithm if requested
			if (settings.UseNagleAlgorithm == false)
			{
				var optionValue = -1;

				unsafe
				{
					var tryDisableNagle = WinsockInterop.setsockopt(serverSocket, WinsockInterop.IPPROTO_TCP, WinsockInterop.TCP_NODELAY, (Byte*) &optionValue, sizeof(Int32));

					// check if attempt has succeed
					if (tryDisableNagle == WinsockInterop.SOCKET_ERROR)
					{
						return false;
					}
				}
			}

			// try enable faster operations on the loopback if requested
			if (settings.UseFastLoopback)
			{
				unsafe
				{
					UInt32 optionValue = 1;

					UInt32 dwBytes;

					var tryEnableFastLoopbackResult = WinsockInterop.WSAIoctl(serverSocket, WinsockInterop.SIO_LOOPBACK_FAST_PATH, &optionValue, sizeof(UInt32), null, 0, out dwBytes, IntPtr.Zero, IntPtr.Zero);

					// check if attempt has succeed
					if (tryEnableFastLoopbackResult == WinsockInterop.SOCKET_ERROR)
					{
						return false;
					}
				}
			}

			// try bind
			{
				// compose address
				var address = new IN_ADDR
				{
					s_addr = 0
				};

				// compose socket address
				var socketAddress = new SOCKADDR_IN
				{
					sin_family = WinsockInterop.AF_INET,
					sin_port = WinsockInterop.htons(settings.Port),
					sin_addr = address
				};

				// try associate address with socket
				var tryBindResult = WinsockInterop.bind(serverSocket, ref socketAddress, SOCKADDR_IN.Size);

				if (tryBindResult == WinsockInterop.SOCKET_ERROR)
				{
					return false;
				}
			}

			// try start listen
			{
				var tryStartListen = WinsockInterop.listen(serverSocket, settings.AcceptBacklogLength);

				if (tryStartListen == WinsockInterop.SOCKET_ERROR)
				{
					return false;
				}
			}

			return true;
		}
示例#23
0
 public static extern unsafe Int32 setsockopt(SOCKET s, Int32 level, Int32 optname, CHAR *optval, Int32 optlen);
示例#24
0
        /// <summary>
        /// Activates server.
        /// </summary>
        public static TryResult <TcpWorker> TryInitialize(TcpServerSettings settings)
        {
            // 0 try initiates use of the Winsock DLL by a process
            {
                WSADATA data;

                var startupResultCode = WinsockInterop.WSAStartup(WinsockInterop.Version, out data);

                // check if startup was successful
                if (startupResultCode != WinsockErrorCode.None)
                {
                    return(TryResult <TcpWorker> .CreateFail(startupResultCode));
                }
            }

            // 1 try create server socket
            SOCKET serverSocket;

            {
                serverSocket = WinsockInterop.WSASocket(WinsockInterop.AF_INET, (Int32)SocketType.Stream, (Int32)ProtocolType.Tcp, IntPtr.Zero, 0, WinsockInterop.WSA_FLAG_REGISTERED_IO);

                // check if socket created
                if (WinsockInterop.INVALID_SOCKET == serverSocket)
                {
                    goto FAIL;
                }
            }

            // 2 try initialize Registered I/O extension
            RIOHandle rioHandle;

            if (!RIOHandle.TryCreate(serverSocket, out rioHandle))
            {
                goto FAIL;
            }

            // 3 get count of processors
            var processorsCount = Environment.ProcessorCount;

            // 4 create collection of the IOCP workers
            var workers = new IocpWorker[processorsCount];

            // initialize workers
            for (var processorIndex = 0; processorIndex < processorsCount; processorIndex++)
            {
                // try create worker
                var tryCreateWorker = IocpWorker.TryCreate(rioHandle, processorIndex, 4096, 1024);

                // check if operation has succeed
                if (!tryCreateWorker.Success)
                {
                    goto FAIL;
                }

                // add to collection
                workers[processorIndex] = tryCreateWorker.Result;
            }

            // try configure server socket and start listen
            if (!TryConfigureBindAndStartListen(serverSocket, settings))
            {
                goto FAIL;
            }

            // success
            var server = new TcpWorker(serverSocket, rioHandle, workers);

            foreach (var worker in workers)
            {
                worker.thread.Start();
            }

            return(TryResult <TcpWorker> .CreateSuccess(server));

FAIL:

            // get last error
            var errorCode = (WinsockErrorCode)WinsockInterop.WSAGetLastError();

            // terminate use of the Winsock DLL
            WinsockInterop.WSACleanup();

            // return fail
            return(TryResult <TcpWorker> .CreateFail(errorCode));
        }
示例#25
0
 public SocketConnectedEventArgs(SOCKET sck)
 {
     AcceptedSocket = sck;
 }
示例#26
0
		public static extern unsafe Int32 setsockopt(SOCKET s, Int32 level, Int32 optname, CHAR* optval, Int32 optlen);
示例#27
0
        private static Boolean TryConfigureBindAndStartListen(SOCKET serverSocket, TcpServerSettings settings)
        {
            // try disable use of the Nagle algorithm if requested
            if (settings.UseNagleAlgorithm == false)
            {
                var optionValue = -1;

                unsafe
                {
                    var tryDisableNagle = WinsockInterop.setsockopt(serverSocket, WinsockInterop.IPPROTO_TCP, WinsockInterop.TCP_NODELAY, (Byte *)&optionValue, sizeof(Int32));

                    // check if attempt has succeed
                    if (tryDisableNagle == WinsockInterop.SOCKET_ERROR)
                    {
                        return(false);
                    }
                }
            }

            // try enable faster operations on the loopback if requested
            if (settings.UseFastLoopback)
            {
                unsafe
                {
                    UInt32 optionValue = 1;

                    UInt32 dwBytes;

                    var tryEnableFastLoopbackResult = WinsockInterop.WSAIoctl(serverSocket, WinsockInterop.SIO_LOOPBACK_FAST_PATH, &optionValue, sizeof(UInt32), null, 0, out dwBytes, IntPtr.Zero, IntPtr.Zero);

                    // check if attempt has succeed
                    if (tryEnableFastLoopbackResult == WinsockInterop.SOCKET_ERROR)
                    {
                        return(false);
                    }
                }
            }

            // try bind
            {
                // compose address
                var address = new IN_ADDR
                {
                    s_addr = 0
                };

                // compose socket address
                var socketAddress = new SOCKADDR_IN
                {
                    sin_family = WinsockInterop.AF_INET,
                    sin_port   = WinsockInterop.htons(settings.Port),
                    sin_addr   = address
                };

                // try associate address with socket
                var tryBindResult = WinsockInterop.bind(serverSocket, ref socketAddress, SOCKADDR_IN.Size);

                if (tryBindResult == WinsockInterop.SOCKET_ERROR)
                {
                    return(false);
                }
            }

            // try start listen
            {
                var tryStartListen = WinsockInterop.listen(serverSocket, settings.AcceptBacklogLength);

                if (tryStartListen == WinsockInterop.SOCKET_ERROR)
                {
                    return(false);
                }
            }

            return(true);
        }
示例#28
0
 // out
 public unsafe static int recvmsg(this SOCKET s, msghdr *msg, int flags)
 {
     return(default(int));
 }
示例#29
0
 public static extern SOCKET accept([In] SOCKET s, [Out] out SOCKADDR addr, [In][Out] ref Int32 addrlen);
示例#30
0
		/// <summary>
		/// Activates server.
		/// </summary>
		public static TryResult<TcpWorker> TryInitialize(TcpServerSettings settings)
		{
			// 0 try initiates use of the Winsock DLL by a process
			{
				WSADATA data;

				var startupResultCode = WinsockInterop.WSAStartup(WinsockInterop.Version, out data);

				// check if startup was successful
				if (startupResultCode != WinsockErrorCode.None)
				{
					return TryResult<TcpWorker>.CreateFail(startupResultCode);
				}
			}

			// 1 try create server socket
			SOCKET serverSocket;

			{
				serverSocket = WinsockInterop.WSASocket(WinsockInterop.AF_INET, (Int32) SocketType.Stream, (Int32) ProtocolType.Tcp, IntPtr.Zero, 0, WinsockInterop.WSA_FLAG_REGISTERED_IO);

				// check if socket created
				if (WinsockInterop.INVALID_SOCKET == serverSocket)
				{
					goto FAIL;
				}
			}

			// 2 try initialize Registered I/O extension
			RIOHandle rioHandle;

			if (!RIOHandle.TryCreate(serverSocket, out rioHandle))
			{
				goto FAIL;
			}

			// 3 get count of processors
			var processorsCount = Environment.ProcessorCount;

			// 4 create collection of the IOCP workers
			var workers = new IocpWorker[processorsCount];

			// initialize workers
			for (var processorIndex = 0; processorIndex < processorsCount; processorIndex++)
			{
				// try create worker
				var tryCreateWorker = IocpWorker.TryCreate(rioHandle, processorIndex, 4096, 1024);

				// check if operation has succeed
				if (!tryCreateWorker.Success)
				{
					goto FAIL;
				}

				// add to collection
				workers[processorIndex] = tryCreateWorker.Result;
			}

			// try configure server socket and start listen
			if (!TryConfigureBindAndStartListen(serverSocket, settings))
			{
				goto FAIL;
			}

			// success
			var server = new TcpWorker(serverSocket, rioHandle, workers);

			foreach (var worker in workers)
			{
				worker.thread.Start();
			}

			return TryResult<TcpWorker>.CreateSuccess(server);

			FAIL:

			// get last error
			var errorCode = (WinsockErrorCode) WinsockInterop.WSAGetLastError();

			// terminate use of the Winsock DLL
			WinsockInterop.WSACleanup();

			// return fail
			return TryResult<TcpWorker>.CreateFail(errorCode);
		}
示例#31
0
 public static extern Int32 bind([In] SOCKET s, [In] ref SOCKADDR_IN name, [In] Int32 namelen);
示例#32
0
 public static extern unsafe Int32 WSAIoctl([In] SOCKET s, [In] DWORD dwIoControlCode, [In] void *lpvInBuffer, [In] DWORD cbInBuffer, [Out] void *lpvOutBuffer, [In] DWORD cbOutBuffer, [Out] out DWORD lpcbBytesReturned, [In] IntPtr lpOverlapped, [In] IntPtr lpCompletionRoutine);
示例#33
0
 public Listener()
 {
     listening = false;
     socket    = null;
     t         = null;
 }
示例#34
0
 public void Dispose()
 {
     socket = null;
     Address = null;
     UID = null;
     lvi = null;
     t = null;
     KeyboardCountry = null;
 }
示例#35
0
文件: socket.cs 项目: wclwksn/code
 public unsafe static int setsockopt(this SOCKET s, int level, int optname, void *optval, int optlen)
 {
     return(default(int));
 }
示例#36
0
文件: socket.cs 项目: wclwksn/code
        //int setsockopt(int s, int level, int optname, const void* optval, int optlen);

        public unsafe static int bind(this SOCKET s, sockaddr *name, int namelen)
        {
            return(default(int));
        }
示例#37
0
        private static Win32Error CreateTcpConnection(bool v6, out SafeSOCKET serviceSocket, out SafeSOCKET clientSocket, out SOCKET acceptSocket, out ushort serverPort, out ushort clientPort)
        {
            Win32Error status;
            var        aiFamily = v6 ? ADDRESS_FAMILY.AF_INET6 : ADDRESS_FAMILY.AF_INET;
            var        hints    = new ADDRINFOW
            {
                ai_family   = aiFamily,
                ai_socktype = SOCK.SOCK_STREAM,
                ai_protocol = IPPROTO.IPPROTO_TCP
            };
            var loopback = v6 ? "::1" : "127.0.0.1";

            serviceSocket = SafeSOCKET.INVALID_SOCKET;
            clientSocket  = SafeSOCKET.INVALID_SOCKET;
            acceptSocket  = SOCKET.INVALID_SOCKET;
            serverPort    = clientPort = 0;

            status = GetAddrInfoW(loopback, "", hints, out var result);
            if (status.Failed)
            {
                goto bail;
            }

            using (result)
            {
                var localhost = result.FirstOrDefault();

                serviceSocket = socket(aiFamily, SOCK.SOCK_STREAM, IPPROTO.IPPROTO_TCP);
                clientSocket  = socket(aiFamily, SOCK.SOCK_STREAM, IPPROTO.IPPROTO_TCP);
                if (serviceSocket == SOCKET.INVALID_SOCKET || clientSocket == SOCKET.INVALID_SOCKET)
                {
                    goto bail;
                }

                status = bind(serviceSocket, localhost.addr, localhost.ai_addrlen);
                if (status.Failed)
                {
                    goto bail;
                }
            }

            var serverSockName = SOCKADDR.Empty;
            var nameLen        = serverSockName.Size;

            status = getsockname(serviceSocket, serverSockName, ref nameLen);
            if (status.Failed)
            {
                goto bail;
            }
            serverPort = v6 ? ((SOCKADDR_IN6)serverSockName).sin6_port : ((SOCKADDR_IN)serverSockName).sin_port;

            status = listen(serviceSocket, SOMAXCONN);
            if (status.Failed)
            {
                goto bail;
            }

            status = connect(clientSocket, serverSockName, nameLen);
            if (status.Failed)
            {
                goto bail;
            }

            var clientSockName = SOCKADDR.Empty;

            nameLen = clientSockName.Size;
            status  = getsockname(clientSocket, clientSockName, ref nameLen);
            if (status.Failed)
            {
                goto bail;
            }

            clientPort = v6 ? ((SOCKADDR_IN6)clientSockName).sin6_port : ((SOCKADDR_IN)clientSockName).sin_port;

            acceptSocket = accept(serviceSocket);
            if (acceptSocket == SOCKET.INVALID_SOCKET)
            {
                goto bail;
            }

            return(Win32Error.ERROR_SUCCESS);

bail:
            return(status == -1 ? WSAGetLastError() : status);
        }
示例#38
0
		internal TryResult<TcpConnection> TryCreateConnection(SOCKET socket, UInt64 id)
		{
			var maxOutstandingReceive = 10u;

			var maxOutstandingSend = 10u;

			// try create request queue
			var requestQueue = RioHandle.CreateRequestQueue(socket, maxOutstandingReceive, 1, maxOutstandingSend, 1, CompletionQueue, CompletionQueue, id);

			if (requestQueue == WinsockInterop.RIO_INVALID_RQ)
			{
				var errorCode = (WinsockErrorCode) WinsockInterop.WSAGetLastError();

				TryResult<TcpConnection>.CreateFail(errorCode);
			}

			var connection = new TcpConnection(socket, requestQueue);

			// add connection into the collection of the connections
			Connections.TryAdd(id, connection);

			return TryResult<TcpConnection>.CreateSuccess(connection);
		}