[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Dotgnu-pnet-commits] CVS: pnetlib/System/Platform Errno.cs,NONE,1.1 SocketMethods.cs,NONE,1.1,
Rhys Weatherley <address@hidden> <=