projects
/
openwrt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[package] firewall: make ESTABLISHED,RELATED rules match before INVALID, use conntrac...
[openwrt.git]
/
package
/
uhttpd
/
src
/
uhttpd-utils.c
diff --git
a/package/uhttpd/src/uhttpd-utils.c
b/package/uhttpd/src/uhttpd-utils.c
index
c7bc867
..
ac00af8
100644
(file)
--- a/
package/uhttpd/src/uhttpd-utils.c
+++ b/
package/uhttpd/src/uhttpd-utils.c
@@
-167,6
+167,9
@@
int uh_tcp_recv(struct client *cl, char *buf, int len)
int sz = 0;
int rsz = 0;
int sz = 0;
int rsz = 0;
+ fd_set reader;
+ struct timeval timeout;
+
/* first serve data from peek buffer */
if( cl->peeklen > 0 )
{
/* first serve data from peek buffer */
if( cl->peeklen > 0 )
{
@@
-180,15
+183,28
@@
int uh_tcp_recv(struct client *cl, char *buf, int len)
/* caller wants more */
if( len > 0 )
{
/* caller wants more */
if( len > 0 )
{
+ FD_ZERO(&reader);
+ FD_SET(cl->socket, &reader);
+
+ timeout.tv_sec = cl->server->conf->network_timeout;
+ timeout.tv_usec = 0;
+
+ if( select(cl->socket + 1, &reader, NULL, NULL, &timeout) > 0 )
+ {
#ifdef HAVE_TLS
#ifdef HAVE_TLS
- if( cl->tls )
- rsz = cl->server->conf->tls_recv(cl, (void *)&buf[sz], len);
- else
+
if( cl->tls )
+
rsz = cl->server->conf->tls_recv(cl, (void *)&buf[sz], len);
+
else
#endif
#endif
- rsz = recv(cl->socket, (void *)&buf[sz], len, 0);
+
rsz = recv(cl->socket, (void *)&buf[sz], len, 0);
- if( (sz == 0) || (rsz > 0) )
- sz += rsz;
+ if( (sz == 0) || (rsz > 0) )
+ sz += rsz;
+ }
+ else if( sz == 0 )
+ {
+ sz = -1;
+ }
}
return sz;
}
return sz;
@@
-233,7
+249,7
@@
int uh_http_sendc(struct client *cl, const char *data, int len)
if( len > 0 )
{
if( len > 0 )
{
- clen = snprintf(chunk, sizeof(chunk), "%X\r\n", len);
+ clen = snprintf(chunk, sizeof(chunk), "%X\r\n", len);
ensure_ret(uh_tcp_send(cl, chunk, clen));
ensure_ret(uh_tcp_send(cl, data, len));
ensure_ret(uh_tcp_send(cl, "\r\n", 2));
ensure_ret(uh_tcp_send(cl, chunk, clen));
ensure_ret(uh_tcp_send(cl, data, len));
ensure_ret(uh_tcp_send(cl, "\r\n", 2));
This page took
0.027602 seconds
and
4
git commands to generate.