aboutsummaryrefslogtreecommitdiff
path: root/core/net/errors_freebsd.odin
diff options
context:
space:
mode:
authorFeoramund <161657516+Feoramund@users.noreply.github.com>2024-06-26 01:18:43 -0400
committerFeoramund <161657516+Feoramund@users.noreply.github.com>2024-06-26 10:05:24 -0400
commite61d893a749d6219c498152bb53d750a384d13f4 (patch)
tree37ab259dc9e08eb43cf193f0b8b2034ad1b9dadf /core/net/errors_freebsd.odin
parent10ce76fcc2ce45a28858ca1562e2b802a781ee58 (diff)
Port `core:net` to FreeBSD
Diffstat (limited to 'core/net/errors_freebsd.odin')
-rw-r--r--core/net/errors_freebsd.odin191
1 files changed, 191 insertions, 0 deletions
diff --git a/core/net/errors_freebsd.odin b/core/net/errors_freebsd.odin
new file mode 100644
index 000000000..5f11c2dee
--- /dev/null
+++ b/core/net/errors_freebsd.odin
@@ -0,0 +1,191 @@
+//+build freebsd
+package net
+
+import "core:c"
+import "core:sys/freebsd"
+
+Create_Socket_Error :: enum c.int {
+ None = 0,
+ Access_Denied = cast(c.int)freebsd.Errno.EACCES,
+ Family_Not_Supported_For_This_Socket = cast(c.int)freebsd.Errno.EAFNOSUPPORT,
+ Full_Per_Process_Descriptor_Table = cast(c.int)freebsd.Errno.EMFILE,
+ Full_System_File_Table = cast(c.int)freebsd.Errno.ENFILE,
+ Insufficient_Buffer_Space = cast(c.int)freebsd.Errno.ENOBUFS,
+ Insufficient_Permission = cast(c.int)freebsd.Errno.EPERM,
+ Protocol_Unsupported_In_Family = cast(c.int)freebsd.Errno.EPROTONOSUPPORT,
+ Socket_Type_Unsupported_By_Protocol = cast(c.int)freebsd.Errno.EPROTOTYPE,
+}
+
+Dial_Error :: enum c.int {
+ None = 0,
+ Port_Required = -1,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Invalid_Namelen = cast(c.int)freebsd.Errno.EINVAL,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+ Address_Unavailable = cast(c.int)freebsd.Errno.EADDRNOTAVAIL,
+ Wrong_Family_For_Socket = cast(c.int)freebsd.Errno.EAFNOSUPPORT,
+ Already_Connected = cast(c.int)freebsd.Errno.EISCONN,
+ Timeout = cast(c.int)freebsd.Errno.ETIMEDOUT,
+ Refused_By_Remote_Host = cast(c.int)freebsd.Errno.ECONNREFUSED,
+ // `Refused` alias for core:net tests.
+ Refused = cast(c.int)freebsd.Errno.ECONNREFUSED,
+ Reset_By_Remote_Host = cast(c.int)freebsd.Errno.ECONNRESET,
+ Network_Unreachable = cast(c.int)freebsd.Errno.ENETUNREACH,
+ Host_Unreachable = cast(c.int)freebsd.Errno.EHOSTUNREACH,
+ Address_In_Use = cast(c.int)freebsd.Errno.EADDRINUSE,
+ Invalid_Address_Space = cast(c.int)freebsd.Errno.EFAULT,
+ In_Progress = cast(c.int)freebsd.Errno.EINPROGRESS,
+ Interrupted_By_Signal = cast(c.int)freebsd.Errno.EINTR,
+ Previous_Attempt_Incomplete = cast(c.int)freebsd.Errno.EALREADY,
+ Broadcast_Unavailable = cast(c.int)freebsd.Errno.EACCES,
+ Auto_Port_Unavailable = cast(c.int)freebsd.Errno.EAGAIN,
+
+ // NOTE: There are additional connect() error possibilities, but they are
+ // strictly for addresses in the UNIX domain.
+}
+
+Bind_Error :: enum c.int {
+ None = 0,
+ Kernel_Resources_Unavailable = cast(c.int)freebsd.Errno.EAGAIN,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+
+ // NOTE: bind() can also return EINVAL if the underlying `addrlen` is an
+ // invalid length for the address family. This shouldn't happen for the net
+ // package, but it's worth noting.
+ Already_Bound = cast(c.int)freebsd.Errno.EINVAL,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+ Given_Nonlocal_Address = cast(c.int)freebsd.Errno.EADDRNOTAVAIL,
+ Address_In_Use = cast(c.int)freebsd.Errno.EADDRINUSE,
+ Address_Family_Mismatch = cast(c.int)freebsd.Errno.EAFNOSUPPORT,
+ Protected_Address = cast(c.int)freebsd.Errno.EACCES,
+ Invalid_Address_Space = cast(c.int)freebsd.Errno.EFAULT,
+
+ // NOTE: There are additional bind() error possibilities, but they are
+ // strictly for addresses in the UNIX domain.
+}
+
+Listen_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Socket_Not_Bound = cast(c.int)freebsd.Errno.EDESTADDRREQ,
+ Already_Connected = cast(c.int)freebsd.Errno.EINVAL,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+ Listening_Not_Supported_For_This_Socket = cast(c.int)freebsd.Errno.EOPNOTSUPP,
+}
+
+Accept_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Interrupted = cast(c.int)freebsd.Errno.EINTR,
+ Full_Per_Process_Descriptor_Table = cast(c.int)freebsd.Errno.EMFILE,
+ Full_System_File_Table = cast(c.int)freebsd.Errno.ENFILE,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+ Listen_Not_Called_On_Socket_Yet = cast(c.int)freebsd.Errno.EINVAL,
+ Address_Not_Writable = cast(c.int)freebsd.Errno.EFAULT,
+
+ // NOTE: This is the same as EWOULDBLOCK.
+ No_Connections_Available = cast(c.int)freebsd.Errno.EAGAIN,
+
+ New_Connection_Aborted = cast(c.int)freebsd.Errno.ECONNABORTED,
+}
+
+TCP_Recv_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Connection_Closed = cast(c.int)freebsd.Errno.ECONNRESET,
+ Not_Connected = cast(c.int)freebsd.Errno.ENOTCONN,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+
+ // NOTE(Feoramund): The next two errors are only relevant for recvmsg(),
+ // but I'm including them for completeness's sake.
+ Full_Table_And_Pending_Data = cast(c.int)freebsd.Errno.EMFILE,
+ Invalid_Message_Size = cast(c.int)freebsd.Errno.EMSGSIZE,
+
+ Timeout = cast(c.int)freebsd.Errno.EAGAIN,
+ Interrupted_By_Signal = cast(c.int)freebsd.Errno.EINTR,
+ Buffer_Pointer_Outside_Address_Space = cast(c.int)freebsd.Errno.EFAULT,
+}
+
+UDP_Recv_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Connection_Closed = cast(c.int)freebsd.Errno.ECONNRESET,
+ Not_Connected = cast(c.int)freebsd.Errno.ENOTCONN,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+
+ // NOTE(Feoramund): The next two errors are only relevant for recvmsg(),
+ // but I'm including them for completeness's sake.
+ Full_Table_And_Data_Discarded = cast(c.int)freebsd.Errno.EMFILE,
+ Invalid_Message_Size = cast(c.int)freebsd.Errno.EMSGSIZE,
+
+ Timeout = cast(c.int)freebsd.Errno.EAGAIN,
+ Interrupted_By_Signal = cast(c.int)freebsd.Errno.EINTR,
+ Buffer_Pointer_Outside_Address_Space = cast(c.int)freebsd.Errno.EFAULT,
+}
+
+TCP_Send_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Broadcast_Status_Mismatch = cast(c.int)freebsd.Errno.EACCES,
+ Not_Connected = cast(c.int)freebsd.Errno.ENOTCONN,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+ Argument_In_Invalid_Address_Space = cast(c.int)freebsd.Errno.EFAULT,
+
+ Message_Size_Breaks_Atomicity = cast(c.int)freebsd.Errno.EMSGSIZE,
+
+ /* The socket is marked non-blocking, or MSG_DONTWAIT is
+ specified, and the requested operation would block. */
+ Would_Block = cast(c.int)freebsd.Errno.EAGAIN,
+
+ // NOTE: This error arises for two distinct reasons.
+ /* The system was unable to allocate an internal buffer.
+ The operation may succeed when buffers become available. */
+
+ /* The output queue for a network interface was full.
+ This generally indicates that the interface has stopped
+ sending, but may be caused by transient congestion. */
+ No_Buffer_Space_Available = cast(c.int)freebsd.Errno.ENOBUFS,
+
+ Host_Unreachable = cast(c.int)freebsd.Errno.EHOSTUNREACH,
+ Already_Connected = cast(c.int)freebsd.Errno.EISCONN,
+ ICMP_Unreachable = cast(c.int)freebsd.Errno.ECONNREFUSED,
+ Host_Down = cast(c.int)freebsd.Errno.EHOSTDOWN,
+ Network_Down = cast(c.int)freebsd.Errno.ENETDOWN,
+ Jailed_Socket_Tried_To_Escape = cast(c.int)freebsd.Errno.EADDRNOTAVAIL,
+ Cannot_Send_More_Data = cast(c.int)freebsd.Errno.EPIPE,
+}
+
+// NOTE(Feoramund): The same as TCP errors go, as far as I'm aware.
+UDP_Send_Error :: distinct TCP_Send_Error
+
+Shutdown_Manner :: enum c.int {
+ Receive = cast(c.int)freebsd.Shutdown_Method.RD,
+ Send = cast(c.int)freebsd.Shutdown_Method.WR,
+ Both = cast(c.int)freebsd.Shutdown_Method.RDWR,
+}
+
+Shutdown_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Invalid_Manner = cast(c.int)freebsd.Errno.EINVAL,
+ Not_Connected = cast(c.int)freebsd.Errno.ENOTCONN,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+}
+
+Socket_Option_Error :: enum c.int {
+ None = 0,
+ Value_Out_Of_Range = -1,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Not_Socket = cast(c.int)freebsd.Errno.ENOTSOCK,
+ Unknown_Option_For_Level = cast(c.int)freebsd.Errno.ENOPROTOOPT,
+ Argument_In_Invalid_Address_Space = cast(c.int)freebsd.Errno.EFAULT,
+ Cannot_Install_Accept_Filter_On_Non_Listening_Socket = cast(c.int)freebsd.Errno.EINVAL,
+ System_Memory_Allocation_Failed = cast(c.int)freebsd.Errno.ENOMEM,
+ Insufficient_System_Resources = cast(c.int)freebsd.Errno.ENOBUFS,
+}
+
+Set_Blocking_Error :: enum c.int {
+ None = 0,
+ Not_Descriptor = cast(c.int)freebsd.Errno.EBADF,
+ Wrong_Descriptor = cast(c.int)freebsd.Errno.ENOTTY,
+}