[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[myserver-commit] [3037] allow ftp sockets to be nonblocking
From: |
Alexandru IANCU |
Subject: |
[myserver-commit] [3037] allow ftp sockets to be nonblocking |
Date: |
Sun, 29 Mar 2009 18:03:43 +0000 |
Revision: 3037
http://svn.sv.gnu.org/viewvc/?view=rev&root=myserver&revision=3037
Author: andu
Date: 2009-03-29 18:03:43 +0000 (Sun, 29 Mar 2009)
Log Message:
-----------
allow ftp sockets to be nonblocking
Modified Paths:
--------------
trunk/myserver/src/base/socket/socket.cpp
trunk/myserver/src/server/clients_thread.cpp
Modified: trunk/myserver/src/base/socket/socket.cpp
===================================================================
--- trunk/myserver/src/base/socket/socket.cpp 2009-03-29 09:27:44 UTC (rev
3036)
+++ trunk/myserver/src/base/socket/socket.cpp 2009-03-29 18:03:43 UTC (rev
3037)
@@ -31,6 +31,7 @@
#include <netinet/in.h>
#include <arpa/inet.h>
#endif
+#include <errno.h>
}
#include <sstream>
@@ -654,6 +655,14 @@
#endif
#ifdef NOT_WIN
err = ::recv((int)socketHandle, buffer, len, flags);
+ if ( err < 0 && errno == EAGAIN )
+ {// if temporarily unavailable ...
+ int flags = fcntl((int)socketHandle, F_GETFL, 0);
+ if ( (flags >= 0) && ((flags & O_NONBLOCK) != 0) )
+ {// ... and nonblocking it's allright
+ return 0;
+ }
+ }
if(err == 0)
err = -1;
Modified: trunk/myserver/src/server/clients_thread.cpp
===================================================================
--- trunk/myserver/src/server/clients_thread.cpp 2009-03-29 09:27:44 UTC
(rev 3036)
+++ trunk/myserver/src/server/clients_thread.cpp 2009-03-29 18:03:43 UTC
(rev 3037)
@@ -315,12 +315,26 @@
busy = 1;
dataRead = c->connectionBuffer.getLength();
+ bool bSocketChanged = false;
+ if ( strcmp(c->host->getProtocolName(), "ftp") == 0 )
+ {
+ FileHandle sh = c->socket->getHandle();
+ int flags = fcntl((int)sh, F_GETFL, 0);
+ if ( (flags >= 0) && ((flags & O_NONBLOCK) == 0) )
+ {
+ c->socket->setNonBlocking(1);
+ bSocketChanged = true;
+ }
+ }
err = c->socket->recv(&((char*)(buffer.getBuffer()))[dataRead],
MYSERVER_KB(8) - dataRead - 1, 0);
if(err == -1 && !server->deleteConnection(c))
return 0;
+ if ( bSocketChanged )
+ c->socket->setNonBlocking(0);
+
buffer.setLength(dataRead + err);
c->setForceControl(0);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [myserver-commit] [3037] allow ftp sockets to be nonblocking,
Alexandru IANCU <=