diff options
Diffstat (limited to 'net/ccxstream/files/patch-ccxstream.c')
-rw-r--r-- | net/ccxstream/files/patch-ccxstream.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/net/ccxstream/files/patch-ccxstream.c b/net/ccxstream/files/patch-ccxstream.c new file mode 100644 index 000000000000..4af51400cc14 --- /dev/null +++ b/net/ccxstream/files/patch-ccxstream.c @@ -0,0 +1,59 @@ +--- ccxstream.c.orig Mon Mar 17 11:29:15 2003 ++++ ccxstream.c Tue May 15 15:02:31 2007 +@@ -1004,7 +1004,7 @@ + for (fh = 0; fh < CC_XSTREAM_MAX_OPEN_FILES; fh++) + if (conn->open_file_handle[fh] == handle) + break; +- if (fh >= CC_XSTREAM_MAX_OPEN_FILES) ++ if ( (fh >= CC_XSTREAM_MAX_OPEN_FILES) || (conn->open_file_handle[fh] <= 0) ) + { + cc_xstream_send_error(conn, id, CC_XSTREAM_XBMSP_ERROR_INVALID_HANDLE, "Invalid file handle."); + return 1; +@@ -1016,10 +1016,19 @@ + } + hlp = cc_xmalloc(rlen); + sz = fread(hlp, 1, rlen, conn->f[fh]); ++ if ( (sz < rlen) && ( (ferror(conn->f[fh]) != 0) || (feof(conn->f[fh]) == 0) ) ) ++ { ++ fclose(conn->f[fh]); ++ conn->f[fh] = NULL; ++ cc_xstream_send_error(conn, id, CC_XSTREAM_XBMSP_ERROR_ILLEGAL_SEEK, "File read failed."); ++ } ++ else ++ { + cc_xstream_write_int(conn, 1 + 4 + 4 + sz); + cc_xstream_write_byte(conn, (int)CC_XSTREAM_XBMSP_PACKET_FILE_CONTENTS); + cc_xstream_write_int(conn, id); + cc_xstream_write_data_string(conn, (unsigned char *)hlp, sz); ++ } + cc_xfree(hlp); + return 1; + } +@@ -1661,6 +1670,16 @@ + setsockopt(prog->s, SOL_SOCKET, SO_REUSEPORT, (char *)&c, sizeof (c)); + #endif /* SO_REUSEPORT */ + ++#ifdef TCP_NODELAY ++ c = 1; ++ setsockopt(prog->s, IPPROTO_TCP, TCP_NODELAY, (char *)&c, sizeof (c)); ++#endif /* TCP_NODELAY */ ++ ++#ifdef SO_KEEPALIVE ++ c = 1; ++ setsockopt(prog->s, SOL_SOCKET, SO_KEEPALIVE, (char *)&c, sizeof (c)); ++#endif /* SO_KEEPALIVE */ ++ + memset(&sa, 0, sizeof (sa)); + sa.sin_family = AF_INET; + sa.sin_addr = la; +@@ -1693,6 +1712,10 @@ + c = 1; + setsockopt(prog->bs, SOL_SOCKET, SO_BROADCAST, (char *)&c, sizeof (c)); + #endif /* SO_BROADCAST */ ++#ifdef SO_KEEPALIVE ++ c = 1; ++ setsockopt(prog->bs, SOL_SOCKET, SO_KEEPALIVE, (char *)&c, sizeof (c)); ++#endif /* SO_KEEPALIVE */ + + memset(&sa, 0, sizeof (sa)); + sa.sin_family = AF_INET; |