use SysBasic;


import SysBasic;

Types for low-level system error integration.

This module defines the error types syserr and qio_err_t.

When should one use syserr and when should one use qio_err_t? qio_err_t is a system error code (a c_int by a nicer name to indicate its purpose). syserr is an enhanced error that might also include an error message. All user-facing Chapel library code, or user Chapel code, should generally use syserr. When wrapping functions or declaring them in C, use qio_err_t to indicate that a function is returning an error code.

A note about the error code documentation in this file. Error descriptions for system errors are included here for convenience only. Other documentation, such as system man pages or the POSIX specification are the authority on system error codes.

type syserr

A type storing an error code or an error message. A syserr can be compared using == or != to an qio_err_t (ie integer error code) or to another syserr. A syserr can be cast to or from an qio_err_t. It can be assigned the value of an qio_err_t or another syserr. In addition, syserr can be checked directly in an if statement like so:

var err: syserr;
if err then do writeln("err contains an error, ie err != ENOERR");
if !err then do writeln("err does not contain an error; err == ENOERR");

When a syserr formal has default intent, the actual is copied to the formal upon a function call and the formal cannot be assigned within the function.

The default value of the syserr type is undefined.


‘SysBasic.syserr’ has been deprecated; please use ‘OS.errorCode’ instead.

type qio_err_t = c_int

An integral error code. This is really just a c_int, but code is clearer if you use qio_err_t to indicate arguments, variables, and return types that are system error codes.


‘qio_err_t’ has been deprecated; please use a ‘CTypes.c_int’ instead.

type fd_t = c_int

A system file descriptor. This is really just a c_int, but code is clearer if you use fd_t to indicate arguments, variables, and return types that are system file descriptors.


The error code indicating that no error occurred (Chapel specific)

proc EEOF

An error code indicating the end of file has been reached (Chapel specific)


An error code indicating that the end of file or the end of the input was reached before the requested amount of data could be read. (Chapel specific)


An error code indicating a format error; for example when reading a quoted string literal, this would be returned if we never encountered the opening quote. (Chapel specific)

const EBADE: c_int

Invalid exchange (linux only)

const EBADFD: c_int

File descriptor in bad state (linux only)

const EBADR: c_int

Invalid request descriptor (linux only)

const EBADRQC: c_int

Invalid request code (linux only)

const EBADSLT: c_int

Invalid slot (linux only)

const ECHRNG: c_int

Channel number out of range (linux only)

const ECOMM: c_int

Communication error on send (linux only)

const EHOSTDOWN: c_int

Host is down. A socket operation failed because the destination host was down. (linux, FreeBSD)

const EISNAM: c_int

Is a named type file (linux only)

const EKEYEXPIRED: c_int

Key has expired (linux only)

const EKEYREJECTED: c_int

Key was rejected by service (linux only)

const EKEYREVOKED: c_int

Key has been revoked (linux only)

const EL2HLT: c_int

Level 2 halted (linux only)

const EL2NSYNC: c_int

Level 2 not synchronized (linux only)

const EL3HLT: c_int

Level 3 halted (linux only)

const EL3RST: c_int

Level 3 halted (linux only)

const ELIBACC: c_int

Cannot access a needed shared library (linux only)

const ELIBBAD: c_int

Accessing a corrupted shared library (linux only)

const ELIBMAX: c_int

Attempting to link in too many shared libraries (linux only)

const ELIBSCN: c_int

lib section in a.out corrupted (linux only)

const ELIBEXEC: c_int

Cannot exec a shared library directly (linux only)

const EMEDIUMTYPE: c_int

Wrong medium type (linux only)

const ENODATA: c_int

No message is available on the STREAM head read queue (POSIX.1)

const ENOKEY: c_int

Required key not available (linux only)

const ENOMEDIUM: c_int

No medium found (linux only)

const ENONET: c_int

Machine is not on the network (linux only)

const ENOPKG: c_int

Package not installed (linux only)

const ENOSR: c_int

No STREAM resources (POSIX.1 XSI STREAMS option)

const ENOSTR: c_int


const ENOTBLK: c_int

Block device required. A block device operation was attempted on a non-block device or file. (linux, FreeBSD)

const ENOTUNIQ: c_int

Name not unique on network (linux only)

const EPFNOSUPPORT: c_int

Protocol family not supported. The protocol family has not been configured into the system or no implementation for it exists. (linux, FreeBSD)

const EREMCHG: c_int

Remote address changed (linux only)

const EREMOTE: c_int

Object is remote (linux only)

const EREMOTEIO: c_int

Remote I/O error (linux only)

const ERESTART: c_int

Interrupted system call should be restarted (linux only)

const ESHUTDOWN: c_int

Can’t send after socket shutdown. A request to send data was disallowed because the socket had already been shut down with a previous shutdown system call.


Socket type not supported. The support for the socket type has not been configured into the system or no implementation for it exists. (linux, FreeBSD)

const ESTRPIPE: c_int

Streams pipe error (linux only)

const ETIME: c_int

Timer expired (POSIX.1 XSI STREAMS option)

const EUCLEAN: c_int

Structure needs cleaning (linux only)

const EUNATCH: c_int

Protocol driver not attached (linux only)

const EUSERS: c_int

Too many users. The quota system ran out of table entries. (linux, FreeBSD)

const EXFULL: c_int

Exchange full (linux only)