dotgnu-pnet-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dotgnu-pnet-commits] CVS: pnetlib/System/Platform Errno.cs,NONE,1.1 Soc


From: Rhys Weatherley <address@hidden>
Subject: [Dotgnu-pnet-commits] CVS: pnetlib/System/Platform Errno.cs,NONE,1.1 SocketMethods.cs,NONE,1.1
Date: Wed, 20 Nov 2002 18:45:31 -0500

Update of /cvsroot/dotgnu-pnet/pnetlib/System/Platform
In directory subversions:/tmp/cvs-serv8784/System/Platform

Added Files:
        Errno.cs SocketMethods.cs 
Log Message:


Move the "Platform.SocketMethods" class into "System.dll" and
make it "internal", to prevent it being exported publicly from
"mscorlib.dll" and hence a security problem.


--- NEW FILE ---
/*
 * Errno.cs - Implementation of the "Platform.Errno" class.
 *
 * Copyright (C) 2001  Southern Storm Software, Pty Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

namespace Platform
{

// Note: these error codes were sourced from a GNU/Linux
// system.  The runtime engine is responsible for mapping
// the error codes of the platform into these values so
// that the C# library has a predictable set of platform
// error codes to deal with.

internal enum Errno
{
        Success                 =        0,     /* Operation succeeded */
        EPERM                   =        1,     /* Operation not permitted */
        ENOENT                  =        2,     /* No such file or directory */
        ESRCH                   =        3,     /* No such process */
        EINTR                   =        4,     /* Interrupted system call */
        EIO                             =        5,     /* I/O error */
        ENXIO                   =        6,     /* No such device or address */
        E2BIG                   =        7,     /* Arg list too long */
        ENOEXEC                 =        8,     /* Exec format error */
        EBADF                   =        9,     /* Bad file number */
        ECHILD                  =       10,     /* No child processes */
        EAGAIN                  =       11,     /* Try again */
        ENOMEM                  =       12,     /* Out of memory */
        EACCES                  =       13,     /* Permission denied */
        EFAULT                  =       14,     /* Bad address */
        ENOTBLK                 =       15,     /* Block device required */
        EBUSY                   =       16,     /* Device or resource busy */
        EEXIST                  =       17,     /* File exists */
        EXDEV                   =       18,     /* Cross-device link */
        ENODEV                  =       19,     /* No such device */
        ENOTDIR                 =       20,     /* Not a directory */
        EISDIR                  =       21,     /* Is a directory */
        EINVAL                  =       22,     /* Invalid argument */
        ENFILE                  =       23,     /* File table overflow */
        EMFILE                  =       24,     /* Too many open files */
        ENOTTY                  =       25,     /* Not a typewriter */
        ETXTBSY                 =       26,     /* Text file busy */
        EFBIG                   =       27,     /* File too large */
        ENOSPC                  =       28,     /* No space left on device */
        ESPIPE                  =       29,     /* Illegal seek */
        EROFS                   =       30,     /* Read-only file system */
        EMLINK                  =       31,     /* Too many links */
        EPIPE                   =       32,     /* Broken pipe */
        EDOM                    =       33,     /* Math argument out of domain 
of func */
        ERANGE                  =       34,     /* Math result not 
representable */
        EDEADLK                 =       35,     /* Resource deadlock would 
occur */
        ENAMETOOLONG    =       36,     /* File name too long */
        ENOLCK                  =       37,     /* No record locks available */
        ENOSYS                  =       38,     /* Function not implemented */
        ENOTEMPTY               =       39,     /* Directory not empty */
        ELOOP                   =       40,     /* Too many symbolic links 
encountered */
        EWOULDBLOCK             =   11, /* Operation would block FIXME: old 
value EAGAIN*/
        ENOMSG                  =       42,     /* No message of desired type */
        EIDRM                   =       43,     /* Identifier removed */
        ECHRNG                  =       44,     /* Channel number out of range 
*/
        EL2NSYNC                =       45,     /* Level 2 not synchronized */
        EL3HLT                  =       46,     /* Level 3 halted */
        EL3RST                  =       47,     /* Level 3 reset */
        ELNRNG                  =       48,     /* Link number out of range */
        EUNATCH                 =       49,     /* Protocol driver not attached 
*/
        ENOCSI                  =       50,     /* No CSI structure available */
        EL2HLT                  =       51,     /* Level 2 halted */
        EBADE                   =       52,     /* Invalid exchange */
        EBADR                   =       53,     /* Invalid request descriptor */
        EXFULL                  =       54,     /* Exchange full */
        ENOANO                  =       55,     /* No anode */
        EBADRQC                 =       56,     /* Invalid request code */
        EBADSLT                 =       57,     /* Invalid slot */
        EDEADLOCK               =       EDEADLK,
        EBFONT                  =       59,     /* Bad font file format */
        ENOSTR                  =       60,     /* Device not a stream */
        ENODATA                 =       61,     /* No data available */
        ETIME                   =       62,     /* Timer expired */
        ENOSR                   =       63,     /* Out of streams resources */
        ENONET                  =       64,     /* Machine is not on the 
network */
        ENOPKG                  =       65,     /* Package not installed */
        EREMOTE                 =       66,     /* Object is remote */
        ENOLINK                 =       67,     /* Link has been severed */
        EADV                    =       68,     /* Advertise error */
        ESRMNT                  =       69,     /* Srmount error */
        ECOMM                   =       70,     /* Communication error on send 
*/
        EPROTO                  =       71,     /* Protocol error */
        EMULTIHOP               =       72,     /* Multihop attempted */
        EDOTDOT                 =       73,     /* RFS specific error */
        EBADMSG                 =       74,     /* Not a data message */
        EOVERFLOW               =       75,     /* Value too large for defined 
data type */
        ENOTUNIQ                =       76,     /* Name not unique on network */
        EBADFD                  =       77,     /* File descriptor in bad state 
*/
        EREMCHG                 =       78,     /* Remote address changed */
        ELIBACC                 =       79,     /* Can not access a needed 
shared library */
        ELIBBAD                 =       80,     /* Accessing a corrupted shared 
library */
        ELIBSCN                 =       81,     /* .lib section in a.out 
corrupted */
        ELIBMAX                 =       82,     /* Attempting to link in too 
many shared libs */
        ELIBEXEC                =       83,     /* Cannot exec a shared library 
directly */
        EILSEQ                  =       84,     /* Illegal byte sequence */
        ERESTART                =       85,     /* Interrupted system call 
should be restarted */
        ESTRPIPE                =       86,     /* Streams pipe error */
        EUSERS                  =       87,     /* Too many users */
        ENOTSOCK                =       88,     /* Socket operation on 
non-socket */
        EDESTADDRREQ    =       89,     /* Destination address required */
        EMSGSIZE                =       90,     /* Message too long */
        EPROTOTYPE              =       91,     /* Protocol wrong type for 
socket */
        ENOPROTOOPT             =       92,     /* Protocol not available */
        EPROTONOSUPPORT =       93,     /* Protocol not supported */
        ESOCKTNOSUPPORT =       94,     /* Socket type not supported */
        EOPNOTSUPP              =       95,     /* Operation not supported on 
transport endpoint */
        EPFNOSUPPORT    =       96,     /* Protocol family not supported */
        EAFNOSUPPORT    =       97,     /* Address family not supported by 
protocol */
        EADDRINUSE              =       98,     /* Address already in use */
        EADDRNOTAVAIL   =       99,     /* Cannot assign requested address */
        ENETDOWN                =  100, /* Network is down */
        ENETUNREACH             =  101, /* Network is unreachable */
        ENETRESET               =  102, /* Network dropped connection because 
of reset */
        ECONNABORTED    =  103, /* Software caused connection abort */
        ECONNRESET              =  104, /* Connection reset by peer */
        ENOBUFS                 =  105, /* No buffer space available */
        EISCONN                 =  106, /* Transport endpoint is already 
connected */
        ENOTCONN                =  107, /* Transport endpoint is not connected 
*/
        ESHUTDOWN               =  108, /* Cannot send after transport endpoint 
shutdown */
        ETOOMANYREFS    =  109, /* Too many references: cannot splice */
        ETIMEDOUT               =  110, /* Connection timed out */
        ECONNREFUSED    =  111, /* Connection refused */
        EHOSTDOWN               =  112, /* Host is down */
        EHOSTUNREACH    =  113, /* No route to host */
        EALREADY                =  114, /* Operation already in progress */
        EINPROGRESS             =  115, /* Operation now in progress */
        ESTALE                  =  116, /* Stale NFS file handle */
        EUCLEAN                 =  117, /* Structure needs cleaning */
        ENOTNAM                 =  118, /* Not a XENIX named type file */
        ENAVAIL                 =  119, /* No XENIX semaphores available */
        EISNAM                  =  120, /* Is a named type file */
        EREMOTEIO               =  121, /* Remote I/O error */
        EDQUOT                  =  122, /* Quota exceeded */
        ENOMEDIUM               =  123, /* No medium found */
        EMEDIUMTYPE             =  124  /* Wrong medium type */

}; // enum Errno

}; // namespace Platform

--- NEW FILE ---
/*
 * SocketMethods.cs - Implementation of the "Platform.SocketMethods" class.
 *
 * Copyright (C) 2002 Free Software Foundation
 * Author : Sidney Richards <address@hidden>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

namespace Platform
{
using System;
using System.Runtime.CompilerServices;

internal class SocketMethods
{
        // Create a socket and obtain a socket descriptor (return true on 
success).
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Create(int af, int st, int pt, out IntPtr 
handle);

        // Bind a socket to an IP address
        //TODO: add support for something other than IPv4
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Bind(IntPtr handle, int af, long address, int 
port);

        // Shutdown a socket
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Shutdown(IntPtr handle, int how);

        // Start listening
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Listen(IntPtr handle, int backlog);

        // Accept an incoming connection
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Accept(IntPtr handle, out long address,
                                                                         out 
int port, out IntPtr newHandle);

        // Connect to specified address
        // TODO: add support for something other than IPv4
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Connect(IntPtr handle, int af, long address, 
int port);

        // Receive bytes from connected socket
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static int Receive(IntPtr handle, byte[] buffer, int 
offset, int size, int flags);

        // Receive bytes from specified EndPoint (noted in address and port)
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static int ReceiveFrom(IntPtr handle, byte[] buffer, int 
offset, int size, int flags, out long address, out int port);

        // Send bytes to connected socket
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static int Send(IntPtr handle, byte[] buffer, int offset, 
int size, int flags);

        // Receive bytes from specified EndPoint (noted in address and port)
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static int SendTo(IntPtr handle, byte[] buffer, int 
offset, int size, int flags, long address, int port);

        // Close a socket (regardless of pending in/output)
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static bool Close(IntPtr handle);

        // Determines the read, write and error status of a set of Sockets
        // The arrays are adjusted to reflect which sockets had events.
        // Unused entries are replaced with IntPtr.Zero.  Returns the number
        // of descriptors that fired, 0 on timeout, or -1 on error.  The
        // timeout is in ticks (100 nanosecond intervals).
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static int Select(IntPtr[] readarray, IntPtr[] 
writearray, IntPtr[] errorarray, long timeout);

        // Get the last-occurring system error code for the current thread.
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static Errno GetErrno();

        // Get a descriptive message for an error from the underlying platform.
        // Returns null if the platform doesn't have an appropriate message.
        [MethodImpl(MethodImplOptions.InternalCall)]
        extern public static String GetErrnoMessage(Errno errno);

}; // class SocketMethods

}; // namespace Platform





reply via email to

[Prev in Thread] Current Thread [Next in Thread]