Example #1
0
        int ISocketsDriver.connect(int socket, IntPtr address, int addressLen)
        {
            Socket sock = null;

            if (!GetSocket(socket, out sock))
            {
                return(ReturnError(SocketError.NotSocket));
            }

            try
            {
                SockAddr sa = new SockAddr();

                sa.MarshalFromNative(address);

                sock.BeginConnect(new IPEndPoint(sa.sin_addr, sa.sin_port), new AsyncCallback(EndSockConnect), socket);
            }
            catch (SocketException se)
            {
                return(ReturnError(se.SocketErrorCode));
            }
            catch
            {
                return(ReturnError(SocketError.SocketError));
            }

            return(ReturnError(SocketError.WouldBlock));
        }
Example #2
0
        int ISocketsDriver.bind(int socket, IntPtr address, int addressLen)
        {
            SocketData sd = null;

            if (!GetSocketData(socket, out sd))
            {
                return(ReturnError(SocketError.NotSocket));
            }

            try
            {
                SockAddr sa = new SockAddr();

                sa.MarshalFromNative(address);

                if (sa.sin_port == 80)
                {
                    sa.sin_port++;
                }

                IPEndPoint ep = new IPEndPoint(sa.sin_addr, sa.sin_port);

                sd.Socket.Bind(ep);
            }
            catch (SocketException se)
            {
                return(ReturnError(se.SocketErrorCode));
            }
            catch
            {
                return(ReturnError(SocketError.SocketError));
            }

            return((int)SocketError.Success);
        }
Example #3
0
        int ISocketsDriver.recvfrom(int socket, IntPtr buf, int len, int flags, IntPtr from, ref int fromlen)
        {
            SocketData sd = null;

            if (!GetSocketData(socket, out sd))
            {
                return(ReturnError(SocketError.NotSocket));
            }

            try
            {
                if (sd.Socket.Poll(0, SelectMode.SelectRead))
                {
                    byte[] data = new byte[len];
                    int    read = 0;

                    SockAddr fromAddr = new SockAddr();

                    fromAddr.MarshalFromNative(from);

                    EndPoint fromEP = new IPEndPoint(fromAddr.sin_addr, fromAddr.sin_port);


                    read = sd.Socket.ReceiveFrom(data, 0, len, (SocketFlags)flags, ref fromEP);

                    Marshal.Copy(data, 0, buf, read);

                    fromAddr.sin_addr = IPAddressToUint(((IPEndPoint)fromEP).Address);

                    fromAddr.sin_port = (ushort)((IPEndPoint)fromEP).Port;

                    fromAddr.sin_family = (short)((IPEndPoint)fromEP).AddressFamily;

                    fromAddr.MarshalToNative(from);

                    return(read);
                }
            }
            catch (SocketException se)
            {
                return(ReturnError((SocketError)se.ErrorCode));
            }
            finally
            {
                ClearSocketEvent(socket, true);
            }

            return(ReturnError(SocketError.WouldBlock));
        }
Example #4
0
        int ISocketsDriver.sendto(int socket, IntPtr buf, int len, int flags, IntPtr to, ref int tolen)
        {
            SocketData sd = null;

            if (!GetSocketData(socket, out sd))
            {
                return(ReturnError(SocketError.NotSocket));
            }

            try
            {
                if (sd.Socket.Poll(0, SelectMode.SelectWrite))
                {
                    byte[] data = new byte[len];
                    int    sent = 0;

                    Marshal.Copy(buf, data, 0, len);

                    SockAddr toAddr = new SockAddr();

                    toAddr.MarshalFromNative(to);

                    IPEndPoint toEP = new IPEndPoint(toAddr.sin_addr, toAddr.sin_port);

                    sent = sd.Socket.SendTo(data, 0, len, (SocketFlags)flags, toEP);

                    ClearSocketEvent(socket, false);

                    return(sent);
                }
            }
            catch (SocketException se)
            {
                return(ReturnError((SocketError)se.ErrorCode));
            }

            return(ReturnError(SocketError.WouldBlock));
        }