diff --git a/include/dap_events_socket_python.h b/include/dap_events_socket_python.h
new file mode 100644
index 0000000000000000000000000000000000000000..4bd9cc79f22c47a03572378603f19c53d9e7c702
--- /dev/null
+++ b/include/dap_events_socket_python.h
@@ -0,0 +1,67 @@
+#ifndef _DAP_EVENTS_SOCKET_PYTHON_H_
+#define _DAP_EVENTS_SOCKET_PYTHON_H_
+
+#include "Python.h"
+#include "dap_events_socket.h"
+#include "dap_events_python.h"
+#include "dap_common.h"
+
+typedef struct PyDapEventsSocket{
+    PyObject_HEAD
+    dap_events_socket_t *t_events_socket;
+}PyDapEventsSocketObject;
+
+static PyTypeObject dapEventsSocket_dapEventsSocketType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "libDapServerCore.DapEventsSocket",             /* tp_name */
+    sizeof(PyDapEventsSocketObject), /* tp_basicsize */
+    0,                         /* tp_itemsize */
+    0,                         /* tp_dealloc */
+    0,                         /* tp_print */
+    0,                         /* tp_getattr */
+    0,                         /* tp_setattr */
+    0,                         /* tp_compare */
+    0,                         /* tp_repr */
+    0,                         /* tp_as_number */
+    0,                         /* tp_as_sequence */
+    0,                         /* tp_as_mapping */
+    0,                         /* tp_hash */
+    0,                         /* tp_call */
+    0,                         /* tp_str */
+    0,                         /* tp_getattro */
+    0,                         /* tp_setattro */
+    0,                         /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,        /* tp_flags */
+    "DapEventsSocket objects",           /* tp_doc */
+};
+
+
+PyObject *dap_events_socket_init_py(); //  Init clients module
+PyObject *dap_events_socket_deinit_py(); // Deinit clients module
+
+PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args);//dap_events_socket_t * a_es);
+
+//PyObject *dap_events_socket_wrap_no_add_py(PyObject *self, PyObject *args);//struct dap_events * a_events,
+                                           // int s, dap_events_socket_callbacks_t * a_callbacks); // Create new client and add it to the list
+
+
+PyObject *dap_events_socket_find_py(PyObject *self, PyObject *args);//int sock, struct dap_events * sh); // Find client by socket
+
+PyObject *dap_events_socket_is_ready_to_read_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc);
+PyObject *dap_events_socket_is_ready_to_write_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc);
+PyObject *dap_events_socket_set_readable_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready);
+PyObject *dap_events_socket_set_writable_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready);
+
+PyObject *dap_events_socket_write_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, const void * data, size_t data_size);
+PyObject *dap_events_socket_write_f_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, const char * format,...);
+PyObject *dap_events_socket_read_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, void * data, size_t data_size);
+
+PyObject *dap_events_socket_delete_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc,bool preserve_inheritor); // Removes the client from the list
+
+PyObject *dap_events_socket_shrink_buf_in_py(PyObject *self, PyObject *args);//dap_events_socket_t * cl, size_t shrink_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/include/libdap-server-core-python.h b/include/libdap-server-core-python.h
index 43bfbdb0becbd081a8ec12ed62d3172a52a838cd..411e65e535ff4883fbd8ad473c8ce1d16c738d6d 100644
--- a/include/libdap-server-core-python.h
+++ b/include/libdap-server-core-python.h
@@ -5,6 +5,7 @@
 #include "dap_events.h"
 #include "dap_common.h"
 #include "dap_events_python.h"
+#include "dap_events_socket_python.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -59,6 +60,20 @@ static PyMethodDef DapServerCorePythonMethods[] = {
         {"eventsDellete", dap_events_delete_py, METH_VARARGS, ""},
         {"eventsStart", dap_events_start_py, METH_VARARGS, ""},
         {"eventsWait", dap_events_wait_py, METH_VARARGS, ""},
+        /* Events Socket */
+        {"eventsSocketInit", dap_events_socket_init_py, METH_NOARGS, ""},
+        {"eventsSocketDeinit", dap_events_socket_deinit_py, METH_NOARGS, ""},
+        {"eventsSocketCreateAfter", dap_events_socket_create_after_py, METH_VARARGS, ""},
+        {"eventsSocketFind", dap_events_socket_find_py, METH_VARARGS, ""},
+        {"eventsSocketIsReadyToRead", dap_events_socket_is_ready_to_read_py, METH_VARARGS, ""},
+        {"eventsSocketIsReadyToWrite", dap_events_socket_is_ready_to_write_py, METH_VARARGS, ""},
+        {"eventsSocketSetReadable", dap_events_socket_set_readable_py, METH_VARARGS, ""},
+        {"eventsSocketSetWritable", dap_events_socket_set_writable_py, METH_VARARGS, ""},
+        {"eventsSocketWrite", dap_events_socket_write_py, METH_VARARGS, ""},
+        {"eventsSocketWriteF", dap_events_socket_write_f_py, METH_VARARGS, ""},
+        {"eventsSocketRead", dap_events_socket_read_py, METH_VARARGS, ""},
+        {"eventsSocketDelete", dap_events_socket_delete_py, METH_VARARGS, ""},
+        {"eventsSocketShrinkBufIn", dap_events_socket_shrink_buf_in_py, METH_VARARGS, ""},
         {NULL, NULL, 0, NULL}
 };
 
@@ -74,10 +89,6 @@ static struct PyModuleDef dapservercorepythonmodule = {
 PyMODINIT_FUNC PyInit_libDapServerCore(void);
 
 
-
-
-
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/dap_events_socket_python.c b/src/dap_events_socket_python.c
new file mode 100644
index 0000000000000000000000000000000000000000..d55acec9bb6543f131d8cd922aae1c78807cf5fd
--- /dev/null
+++ b/src/dap_events_socket_python.c
@@ -0,0 +1,145 @@
+#include "dap_events_socket_python.h"
+
+PyObject *dap_events_socket_init_py(){
+    int result = dap_events_socket_init();
+    return  PyLong_FromLong(result);
+}
+PyObject *dap_events_socket_deinit_py(){
+    dap_events_socket_deinit();
+    return  PyLong_FromLong(0);
+}
+
+PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args){
+    PyObject *in_object;
+    if(!PyArg_ParseTuple(args, "O", &in_object)){
+        return NULL;
+    }
+    dap_events_socket_create_after(((PyDapEventsSocketObject*)in_object)->t_events_socket);
+    return  PyLong_FromLong(0);
+}
+
+//PyObject *dap_events_socket_wrap_no_add_py(PyObject *self, PyObject *args){
+//    return  PyLong_FromLong(0);
+//}
+
+
+PyObject *dap_events_socket_find_py(PyObject *self, PyObject *args){
+    int socket;
+    PyObject *in_object;
+    if (!PyArg_ParseTuple(args, "i|O", &socket, &in_object)){
+        return NULL;
+    }
+    dap_events_socket_t *events_socket = dap_events_socket_find(socket, ((PyDapEventsObject*)in_object)->t_events);
+    PyObject *l_events_socket = _PyObject_New(&dapEventsSocket_dapEventsSocketType);
+    ((PyDapEventsSocketObject*)l_events_socket)->t_events_socket = events_socket;
+    return Py_BuildValue("O", l_events_socket);
+}
+
+PyObject *dap_events_socket_is_ready_to_read_py(PyObject *self, PyObject *args){
+    PyObject *in_obj;
+    if (!PyArg_ParseTuple(args, "O", &in_obj)){
+        return NULL;
+    }
+    bool result = dap_events_socket_is_ready_to_read(((PyDapEventsSocketObject*)in_obj)->t_events_socket);
+    if (result)
+        return Py_BuildValue("O", Py_True);
+    else
+        return Py_BuildValue("O", Py_False);
+}
+PyObject *dap_events_socket_is_ready_to_write_py(PyObject *self, PyObject *args){
+    PyObject *in_obj;
+    if (!PyArg_ParseTuple(args, "O", &in_obj)){
+        return NULL;
+    }
+    bool result = dap_events_socket_is_ready_to_write(((PyDapEventsSocketObject*)in_obj)->t_events_socket);
+    if (result)
+        return Py_BuildValue("O", Py_True);
+    else
+        return Py_BuildValue("O", Py_False);
+}
+PyObject *dap_events_socket_set_readable_py(PyObject *self, PyObject *args){
+    PyObject *in_obj;
+    PyObject *l_is_ready;
+    if (!PyArg_ParseTuple(args, "O", &in_obj, &l_is_ready)){
+        return NULL;
+    }
+    bool is_ready = true;
+    if (l_is_ready == Py_False)
+        is_ready = false;
+    dap_events_socket_set_readable(((PyDapEventsSocketObject*)in_obj)->t_events_socket, is_ready);
+    return  PyLong_FromLong(0);
+}
+PyObject *dap_events_socket_set_writable_py(PyObject *self, PyObject *args){
+    PyObject *in_obj;
+    PyObject *l_is_ready;
+    if (!PyArg_ParseTuple(args, "O", &in_obj, &l_is_ready)){
+        return NULL;
+    }
+    bool is_ready = true;
+    if (l_is_ready == Py_False)
+        is_ready = false;
+    dap_events_socket_set_writable(((PyDapEventsSocketObject*)in_obj)->t_events_socket, is_ready);
+    return  PyLong_FromLong(0);
+}
+
+PyObject *dap_events_socket_write_py(PyObject *self, PyObject *args){
+    PyObject *in_obj;
+    PyBytesObject *in_bytes;
+    size_t in_size;
+    if (!PyArg_ParseTuple(args, "O|S|n", &in_obj, &in_bytes, &in_size)){
+        return NULL;
+    }
+    char *in_v_bytes = PyBytes_AsString((PyObject*)in_bytes);
+    size_t res_size = dap_events_socket_write(((PyDapEventsSocketObject*)in_obj)->t_events_socket,
+                                              in_v_bytes, in_size);
+    return Py_BuildValue("n", res_size);
+}
+PyObject *dap_events_socket_write_f_py(PyObject *self, PyObject *args){
+    PyObject *in_object;
+    const char *format;
+    PyTupleObject *pto;
+    if (!PyArg_ParseTuple(args, "O|s|O", &in_object, &format, &pto)){
+        return  NULL;
+    }
+    va_list ap;
+    if (!PyArg_VaParse(args, format, ap)){
+        return NULL;
+    }
+    size_t res_size = dap_events_socket_write_f(((PyDapEventsSocketObject*)in_object)->t_events_socket, format, ap);
+    return Py_BuildValue("n", res_size);
+}
+PyObject *dap_events_socket_read_py(PyObject *self, PyObject *args){
+    PyObject *in_object;
+    size_t in_size;
+    if (!PyArg_ParseTuple(args, "O|S|n", &in_object, &in_size)){
+        return NULL;
+    }
+    void *res = DAP_NEW_SIZE(void*, in_size);
+    size_t res_size = dap_events_socket_read(((PyDapEventsSocketObject*)in_object)->t_events_socket, res, in_size);
+    PyBytesObject *res_obj = (PyBytesObject*)PyBytes_FromString(res);
+    return  Py_BuildValue("nS", res_size, res_obj);
+}
+
+PyObject *dap_events_socket_delete_py(PyObject *self, PyObject *args){
+    PyObject *in_object;
+    PyObject *in_bool;
+    if (!PyArg_ParseTuple(args, "O|O", &in_object, &in_bool)){
+        return NULL;
+    }
+    bool boolean = true;
+    if (in_bool == Py_False)
+        boolean = false;
+    dap_events_socket_delete(((PyDapEventsSocketObject*)in_object)->t_events_socket, boolean);
+    return  PyLong_FromLong(0);
+}
+
+PyObject *dap_events_socket_shrink_buf_in_py(PyObject *self, PyObject *args){
+    PyObject *in_object;
+    size_t in_size;
+    if(!PyArg_ParseTuple(args, "O|n", &in_object, &in_size)){
+        return NULL;
+    }
+    dap_events_socket_shrink_buf_in(((PyDapEventsSocketObject*)in_object)->t_events_socket, in_size);
+    return  PyLong_FromLong(0);
+}
+
diff --git a/src/libdap-server-core-python.c b/src/libdap-server-core-python.c
index e618cd3c6eb6753da7cd249c62c0a71fb26f0981..aedf19336960866e8a23a672d992419de6ade679 100644
--- a/src/libdap-server-core-python.c
+++ b/src/libdap-server-core-python.c
@@ -50,7 +50,9 @@ static PyObject *dap_server_core_listen(PyObject *self, PyObject *args){
 PyMODINIT_FUNC PyInit_libDapServerCore(void){
     dapServer_dapServerType.tp_new = PyType_GenericNew;
     dapEvents_dapEventsType.tp_new = PyType_GenericNew;
-    if (PyType_Ready(&dapServer_dapServerType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0)
+    dapEventsSocket_dapEventsSocketType.tp_new = PyType_GenericNew;
+    if (PyType_Ready(&dapServer_dapServerType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0
+            || PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0)
             return NULL;
     return PyModule_Create(&dapservercorepythonmodule);
 }