diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c
index b92ae2a8fb9f00538abd304f974eb122d49de956..e277971f018d0b3d0d861c9ff075c6e383820406 100644
--- a/dap-sdk/net/core/dap_server.c
+++ b/dap-sdk/net/core/dap_server.c
@@ -517,9 +517,20 @@ static void read_write_cb( dap_client_remote_t *dap_cur, int32_t revents )
                                    dap_cur->buf_out_size - total_sent,
                                    MSG_DONTWAIT | MSG_NOSIGNAL );
         if( bytes_sent < 0 ) {
-          log_it(L_ERROR,"[THREAD %u] Error occured in send() function %s", dap_cur->tn, strerror(errno) );
-          dap_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
-          break;
+            if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
+                dap_cur->pevent.events = EPOLLOUT | EPOLLERR;
+                if( epoll_ctl(dap_cur->efd, EPOLL_CTL_MOD, dap_cur->socket, &dap_cur->pevent) != 0 ) {
+                    log_it( L_ERROR, "epoll_ctl failed..." );
+                    dap_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
+                    break;
+                } else {
+                    log_it( L_INFO, "wait for available space in buff..." );
+                }
+            } else {
+                log_it(L_ERROR,"[THREAD %u] Error occured in send() function %s", dap_cur->tn, strerror(errno) );
+                dap_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
+                break;
+            }
         }
 
         total_sent += (size_t)bytes_sent;
@@ -684,9 +695,7 @@ void  *thread_loop( void *arg )
           log_it( L_ERROR,"Socket error: %u, remove it" , dap_cur->socket );
           dap_cur->flags |= DAP_SOCK_SIGNAL_CLOSE;
       }
-#ifdef _WIN32
-      set_nonblock_socket(dap_cur->socket); // pconst: for winsock2 has no appropriate MSG attributes
-#endif
+      set_nonblock_socket(dap_cur->socket);
       if ( !(dap_cur->flags & DAP_SOCK_SIGNAL_CLOSE) || dap_cur->no_close )
         read_write_cb( dap_cur, events[i].events );