mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-28 17:04:34 +00:00
293 lines
10 KiB
Odin
293 lines
10 KiB
Odin
package net
|
|
|
|
/*
|
|
Retrieve a platform specific error code, for when the categorized cross-platform errors are not enough.
|
|
|
|
Platforms specific returns:
|
|
- Darwin: `posix.Errno` (`core:sys/posix`)
|
|
- Linux: `linux.Errno` (`core:sys/linux`)
|
|
- FreeBSD: `freebsd.Errno` (`core:sys/freebsd`)
|
|
- Windows: `windows.System_Error` (`core:sys/windows`)
|
|
*/
|
|
@(require_results)
|
|
last_platform_error :: proc() -> i32 {
|
|
return _last_platform_error()
|
|
}
|
|
|
|
/*
|
|
Retrieve a stringified version of the last platform error.
|
|
*/
|
|
@(require_results)
|
|
last_platform_error_string :: proc() -> string {
|
|
return _last_platform_error_string()
|
|
}
|
|
|
|
set_last_platform_error :: proc(err: i32) {
|
|
_set_last_platform_error(err)
|
|
}
|
|
|
|
Create_Socket_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid/unsupported family or protocol.
|
|
Invalid_Argument,
|
|
// The user has no permission to create a socket of this type and/or protocol.
|
|
Insufficient_Permissions,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Dial_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid endpoint and/or options.
|
|
Invalid_Argument,
|
|
// An attempt was made to connect to a broadcast socket on a socket that doesn't support it.
|
|
Broadcast_Not_Supported,
|
|
// The socket is already connected.
|
|
Already_Connected,
|
|
// The socket is already in the progress of making a connection.
|
|
Already_Connecting,
|
|
// The address is already in use.
|
|
Address_In_Use,
|
|
// Could not reach the remote host.
|
|
Host_Unreachable,
|
|
// The remote host refused the connection or isn't listening.
|
|
Refused,
|
|
// The connection was reset by the remote host.
|
|
Reset,
|
|
// Timed out before making a connection.
|
|
Timeout,
|
|
// Non-blocking socket that would need to block waiting to connect.
|
|
Would_Block,
|
|
// Interrupted by a signal or other method of cancellation like WSACancelBlockingCall on Windows.
|
|
Interrupted,
|
|
// Endpoint given without a port, which is required.
|
|
Port_Required,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Bind_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid socket or endpoint, or invalid combination of the two.
|
|
Invalid_Argument,
|
|
// The socket is already bound to an address.
|
|
Already_Bound,
|
|
// The address is protected and the current user has insufficient permissions to access it.
|
|
Insufficient_Permissions_For_Address,
|
|
// The address is already in use.
|
|
Address_In_Use,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Listen_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// The socket or backlog is invalid.
|
|
Invalid_Argument,
|
|
// The socket is valid, but does not support listening.
|
|
Unsupported_Socket,
|
|
// The socket is already connected.
|
|
Already_Connected,
|
|
// The address is already in use.
|
|
Address_In_Use,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Accept_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid socket, or options.
|
|
Invalid_Argument,
|
|
// The given socket does not support accepting connections.
|
|
Unsupported_Socket,
|
|
// accept called on a socket which is not listening.
|
|
Not_Listening,
|
|
// A connection arrived but was closed while in the listen queue.
|
|
Aborted,
|
|
// Timed out before being able to accept a connection.
|
|
Timeout,
|
|
// Non-blocking socket that would need to block waiting for a connection.
|
|
Would_Block,
|
|
// Interrupted by a signal or other method of cancellation like WSACancelBlockingCall on Windows.
|
|
Interrupted,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
TCP_Recv_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid socket or buffer given.
|
|
Invalid_Argument,
|
|
// The socket is not connected.
|
|
Not_Connected,
|
|
// Connection was closed/broken/shutdown while receiving data.
|
|
Connection_Closed,
|
|
// Timed out before being able to receive any data.
|
|
Timeout,
|
|
// Non-blocking socket that would need to block waiting on data.
|
|
Would_Block,
|
|
// Interrupted by a signal or other method of cancellation like WSACancelBlockingCall on Windows.
|
|
Interrupted,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
UDP_Recv_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid socket or buffer given.
|
|
Invalid_Argument,
|
|
// "Connection" was refused by remote, or closed/broken/shutdown while receiving data.
|
|
Connection_Refused,
|
|
// Timed out before being able to receive any data.
|
|
Timeout,
|
|
// Non-blocking socket that would need to block waiting on data.
|
|
Would_Block,
|
|
// Interrupted by a signal or other method of cancellation like WSACancelBlockingCall on Windows.
|
|
Interrupted,
|
|
// Linux and UDP only: indicates the buffer was too small to receive all data, and the excess is truncated and discarded.
|
|
Excess_Truncated,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
TCP_Send_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid socket or buffer given.
|
|
Invalid_Argument,
|
|
// Connection was closed/broken/shutdown while receiving data.
|
|
Connection_Closed,
|
|
// The socket is not connected.
|
|
Not_Connected,
|
|
// Could not reach the remote host.
|
|
Host_Unreachable,
|
|
// Timed out before being able to send any data.
|
|
Timeout,
|
|
// Non-blocking socket that would need to block waiting on the remote to be able to receive the data.
|
|
Would_Block,
|
|
// Interrupted by a signal or other method of cancellation like WSACancelBlockingCall on Windows.
|
|
Interrupted,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
UDP_Send_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Invalid socket or buffer given.
|
|
Invalid_Argument,
|
|
// Could not reach the remote host.
|
|
Host_Unreachable,
|
|
// "Connection" was refused by remote, or closed/broken/shutdown while sending data.
|
|
Connection_Refused,
|
|
// Timed out before being able to send any data.
|
|
Timeout,
|
|
// Non-blocking socket that would need to block waiting on the remote to be able to receive the data.
|
|
Would_Block,
|
|
// Interrupted by a signal or other method of cancellation like WSACancelBlockingCall on Windows.
|
|
Interrupted,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Shutdown_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Socket is invalid or not connected, or the manner given is invalid.
|
|
Invalid_Argument,
|
|
// Connection was closed/aborted/shutdown.
|
|
Connection_Closed,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Socket_Info_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Socket is invalid or not connected, or the manner given is invalid.
|
|
Invalid_Argument,
|
|
// The socket is valid, but unsupported by this opperation.
|
|
Unsupported_Socket,
|
|
// Connection was closed/aborted/shutdown.
|
|
Connection_Closed,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Socket_Option_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Not enough space in internal tables/buffers to create a new socket, or an unsupported protocol is given.
|
|
Insufficient_Resources,
|
|
// Socket is invalid, not connected, or the connection has been closed/reset/shutdown.
|
|
Invalid_Socket,
|
|
// Unknown or unsupported option for the socket.
|
|
Invalid_Option,
|
|
// Invalid level or value.
|
|
Invalid_Value,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|
|
|
|
Set_Blocking_Error :: enum i32 {
|
|
None,
|
|
// No network connection, or the network stack is not initialized.
|
|
Network_Unreachable,
|
|
// Socket is invalid.
|
|
Invalid_Argument,
|
|
|
|
// An error unable to be categorized in above categories, `last_platform_error` may have more info.
|
|
Unknown,
|
|
}
|