diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs
index bb750bb7df09860c7dc37e074aca049680ba5c7a..56aa5532cbdb8b3aa79528ddf480a117fe2a511d 100644
--- a/src/platform/redox/socket.rs
+++ b/src/platform/redox/socket.rs
@@ -145,6 +145,28 @@ impl PalSocket for Sys {
         option_value: *mut c_void,
         option_len: *mut socklen_t,
     ) -> c_int {
+        match level {
+            SOL_SOCKET => match option_name {
+                SO_ERROR => {
+                    if option_value.is_null() {
+                        return e(Err(syscall::Error::new(syscall::EFAULT))) as c_int;
+                    }
+
+                    if (option_len as usize) < mem::size_of::<c_int>() {
+                        return e(Err(syscall::Error::new(syscall::EINVAL))) as c_int;
+                    }
+
+                    let error = unsafe { &mut *(option_value as *mut c_int) };
+                    //TODO: Socket nonblock connection error
+                    *error = 0;
+
+                    return 0;
+                },
+                _ => (),
+            },
+            _ => (),
+        }
+
         eprintln!(
             "getsockopt({}, {}, {}, {:p}, {:p})",
             socket, level, option_name, option_value, option_len