bind() private method

private bind ( IntPtr s, sockaddr_in &name, int namelen ) : int
s System.IntPtr
name sockaddr_in
namelen int
return int
Ejemplo n.º 1
0
        public void Listen(IPEndPoint localEP, int backlog)
        {
            in_addr inAddress = new in_addr();

            inAddress.s_b1 = localEP.Address.GetAddressBytes()[0];
            inAddress.s_b2 = localEP.Address.GetAddressBytes()[1];
            inAddress.s_b3 = localEP.Address.GetAddressBytes()[2];
            inAddress.s_b4 = localEP.Address.GetAddressBytes()[3];

            sockaddr_in sa = new sockaddr_in();

            sa.sin_family = ADDRESS_FAMILIES.AF_INET;
            sa.sin_port   = WinSock.htons((ushort)localEP.Port);
            //Imports.ThrowLastWSAError();
            sa.sin_addr = inAddress;

            unsafe
            {
                if (WinSock.bind(_listenerSocket, ref sa, sizeof(sockaddr_in)) == WinSock.SOCKET_ERROR)
                {
                    WinSock.ThrowLastWSAError();
                }
            }

            if (WinSock.listen(_listenerSocket, backlog) == WinSock.SOCKET_ERROR)
            {
                WinSock.ThrowLastWSAError();
            }

            foreach (var s in allSockets)
            {
                BeginAccept(s);
            }
        }
Ejemplo n.º 2
0
        public RioTcpClientPool(RioFixedBufferPool sendPool, RioFixedBufferPool revicePool, uint socketCount,
                                uint maxOutstandingReceive = 1024, uint maxOutstandingSend = 1024)
            : base(sendPool, revicePool, socketCount, ADDRESS_FAMILIES.AF_INET, SOCKET_TYPE.SOCK_STREAM, PROTOCOL.IPPROTO_TCP, maxOutstandingReceive, maxOutstandingSend, (maxOutstandingReceive + maxOutstandingSend) * socketCount)
        {
            foreach (var s in allSockets)
            {
                _freeSockets.Enqueue(s);

                in_addr inAddress = new in_addr();
                inAddress.s_b1 = 0;
                inAddress.s_b2 = 0;
                inAddress.s_b3 = 0;
                inAddress.s_b4 = 0;

                sockaddr_in sa = new sockaddr_in();
                sa.sin_family = adressFam;
                sa.sin_port   = 0;
                //Imports.ThrowLastWSAError();
                sa.sin_addr = inAddress;

                unsafe
                {
                    if (WinSock.bind(s.Socket, ref sa, sizeof(sockaddr_in)) == WinSock.SOCKET_ERROR)
                    {
                        WinSock.ThrowLastWSAError();
                    }
                }
            }
        }
Ejemplo n.º 3
0
        internal override void InitializeSocket(RioConnectionOrientedSocket socket)
        {
            socket.SetLoopbackFastPath(true);
            socket.SetTcpNoDelay(true);
            sockaddr_in sa = new sockaddr_in();

            sa.sin_family = adressFam;

            unsafe
            {
                if (WinSock.bind(socket.Socket, ref sa, sizeof(sockaddr_in)) == WinSock.SOCKET_ERROR)
                {
                    WinSock.ThrowLastWSAError();
                }
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Binds a socket to a local ip and port,
        /// for multicast applications sending to a destinations on the same machine, use port 0
        /// </summary>
        /// <param name="localEP"></param>
        /// <returns></returns>
        public unsafe RioConnectionlessSocket Bind(IPEndPoint localEP)
        {
            var socket = new RioConnectionlessSocket(this, SendBufferPool, ReceiveBufferPool, adressBufferPool, MaxOutstandingReceive, MaxOutstandingSend, SendCompletionQueue, ReceiveCompletionQueue, adressFam, sockType, protocol);

            sockaddr_in sa = new sockaddr_in();

            sa.sin_family = ADDRESS_FAMILIES.AF_INET;
            sa.sin_port   = WinSock.htons((ushort)localEP.Port);
            var ipBytes = localEP.Address.GetAddressBytes();

            fixed(byte *a = ipBytes)
            Unsafe.CopyBlock(sa.sin_addr.Address, a, (uint)ipBytes.Length);

            unsafe
            {
                if (WinSock.bind(socket.Socket, ref sa, sizeof(sockaddr_in)) == WinSock.SOCKET_ERROR)
                {
                    WinSock.ThrowLastWSAError();
                }
            }

            socket.SetInUse(true);
            return(socket);
        }