diff --git a/py/mpconfig.h b/py/mpconfig.h
index 9f541ef705d315cdca9ff47962d40d9a64532e52..e92e4c45d0de070c281dc14a696b51d95eabefa8 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -462,6 +462,11 @@ typedef double mp_float_t;
 #define MICROPY_PY_BUILTINS_RANGE_ATTRS (1)
 #endif
 
+// Whether to support timeout exceptions (like socket.timeout)
+#ifndef MICROPY_PY_BUILTINS_TIMEOUTERROR
+#define MICROPY_PY_BUILTINS_TIMEOUTERROR (0)
+#endif
+
 // Whether to support complete set of special methods
 // for user classes, otherwise only the most used
 #ifndef MICROPY_PY_ALL_SPECIAL_METHODS
diff --git a/py/obj.h b/py/obj.h
index 7275886c76ddf7d4aeb0fb3845918cc871ba8bbc..10a678e83b44e875e9a8897f7edef788a4fb6ee2 100644
--- a/py/obj.h
+++ b/py/obj.h
@@ -426,6 +426,7 @@ extern const mp_obj_type_t mp_type_MemoryError;
 extern const mp_obj_type_t mp_type_NameError;
 extern const mp_obj_type_t mp_type_NotImplementedError;
 extern const mp_obj_type_t mp_type_OSError;
+extern const mp_obj_type_t mp_type_TimeoutError;
 extern const mp_obj_type_t mp_type_OverflowError;
 extern const mp_obj_type_t mp_type_RuntimeError;
 extern const mp_obj_type_t mp_type_StopIteration;
diff --git a/py/objexcept.c b/py/objexcept.c
index 6c108d99cb0c0fc3c3f5836e00749730ae877a3d..75369bac7c5b0d86023f4f30c397aae59ecfc4f1 100644
--- a/py/objexcept.c
+++ b/py/objexcept.c
@@ -221,8 +221,11 @@ MP_DEFINE_EXCEPTION(Exception, BaseException)
     MP_DEFINE_EXCEPTION(UnboundLocalError, NameError)
     */
   MP_DEFINE_EXCEPTION(OSError, Exception)
-    /*
+#if MICROPY_PY_BUILTINS_TIMEOUTERROR
     MP_DEFINE_EXCEPTION_BASE(OSError)
+    MP_DEFINE_EXCEPTION(TimeoutError, OSError)
+#endif
+    /*
     MP_DEFINE_EXCEPTION(BlockingIOError, OSError)
     MP_DEFINE_EXCEPTION(ChildProcessError, OSError)
     MP_DEFINE_EXCEPTION(ConnectionError, OSError)
@@ -235,7 +238,6 @@ MP_DEFINE_EXCEPTION(Exception, BaseException)
     MP_DEFINE_EXCEPTION(NotADirectoryError, OSError)
     MP_DEFINE_EXCEPTION(PermissionError, OSError)
     MP_DEFINE_EXCEPTION(ProcessLookupError, OSError)
-    MP_DEFINE_EXCEPTION(TimeoutError, OSError)
     MP_DEFINE_EXCEPTION(FileExistsError, OSError)
     MP_DEFINE_EXCEPTION(FileNotFoundError, OSError)
     MP_DEFINE_EXCEPTION(ReferenceError, Exception)
diff --git a/py/qstrdefs.h b/py/qstrdefs.h
index 2f51d470ddf89abf3bf5b4e21cd3096a7b33fcb1..367aea17bd201aa9786f58031a01bae92bfb7276 100644
--- a/py/qstrdefs.h
+++ b/py/qstrdefs.h
@@ -140,6 +140,9 @@ Q(MemoryError)
 Q(NameError)
 Q(NotImplementedError)
 Q(OSError)
+#if MICROPY_PY_BUILTINS_TIMEOUTERROR
+Q(TimeoutError)
+#endif
 Q(OverflowError)
 Q(RuntimeError)
 Q(SyntaxError)