Hello, I'm not sure what is causing this error (please see the stack trace below), all I can say it's relatively big XML being sent. I must be doing something tremendously inefficient or else this error means something else, but I hope you would be able to advise:

[2011-07-06 14:20:27 [ERROR]] I/O timeout reading #<SB-SYS:FD-STREAM for "a socket" {B8E0AA1}>.
0: (SB-DEBUG::MAP-BACKTRACE #<CLOSURE (LAMBDA #) {B9034D5}>)[:EXTERNAL]
1: (BACKTRACE 536870911 #<SB-IMPL::STRING-OUTPUT-STREAM {B903471}>)
2: (TRIVIAL-BACKTRACE:PRINT-BACKTRACE-TO-STREAM
    #<SB-IMPL::STRING-OUTPUT-STREAM {B903471}>)
3: (HUNCHENTOOT::GET-BACKTRACE)
4: ((FLET #:LAMBDA284) #<SB-SYS:IO-TIMEOUT {B903139}>)
5: (SIGNAL #<SB-SYS:IO-TIMEOUT {B903139}>)[:EXTERNAL]
6: (ERROR SB-SYS:IO-TIMEOUT)[:EXTERNAL]
7: (SB-IMPL::SIGNAL-TIMEOUT SB-SYS:IO-TIMEOUT)[:EXTERNAL]
8: (SB-IMPL::REFILL-INPUT-BUFFER #<SB-SYS:FD-STREAM for "a socket" {B8E0AA1}>)
9: (SB-IMPL::FD-STREAM-READ-N-BYTES
    #<SB-SYS:FD-STREAM for "a socket" {B8E0AA1}>
    #(97 108 121 116 105 99 115 62 10 32 32 102 49 50 51 52 53 54 55 56 57 48
. . . long array of data
)
    0
    8191
    NIL)
10: (SB-IMPL::ANSI-STREAM-READ-SEQUENCE
     #(97 108 121 116 105 99 115 62 10 32 32 102 49 50 51 52 53 54 55 56 57 48
. . . long array of data
)
     #<SB-SYS:FD-STREAM for "a socket" {B8E0AA1}>
     0
     8191)
11: (READ-SEQUENCE
     #(97 108 121 116 105 99 115 62 10 32 32 102 49 50 51 52 53 54 55 56 57 48
. . . long array of data
)
     #<SB-SYS:FD-STREAM for "a socket" {B8E0AA1}>)[:EXTERNAL]
12: ((SB-PCL::FAST-METHOD TRIVIAL-GRAY-STREAMS:STREAM-READ-SEQUENCE
      (FLEXI-STREAMS:FLEXI-INPUT-STREAM T T T))
     #<unavailable argument>
     #<unavailable argument>
     #<unavailable argument>
     #<unavailable argument>
     #<unavailable argument>
     #<unavailable argument>)[:EXTERNAL]
13: ((LAMBDA
         (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1.
          SB-PCL::.ARG2. SB-PCL::.ARG3. SB-INT:&MORE
          SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.))
     #<unused argument>
     #<unused argument>
     #<FLEXI-STREAMS:FLEXI-IO-STREAM {B8EA781}>
     #(97 108 121 116 105 99 115 62 10 32 32 102 49 50 51 52 53 54 55 56 57 48
. . . long array of data
)
     0
     8191
     -307111303
     0)
14: (READ-SEQUENCE
     #(97 108 121 116 105 99 115 62 10 32 32 102 49 50 51 52 53 54 55 56 57 48
. . . long array of data
)
     #<FLEXI-STREAMS:FLEXI-IO-STREAM {B8EA781}>)[:EXTERNAL]
15: ((SB-PCL::FAST-METHOD RUNES::XSTREAM-UNDERFLOW (RUNES:XSTREAM))
     #<unavailable argument>
     #<unavailable argument>
     #<RUNES:XSTREAM [main document :MAIN NIL]>)
16: (CXML::READ-NAME-TOKEN #<unavailable argument>)
17: (CXML::READ-TAG-2
     #S(CXML::ZSTREAM
        :TOKEN-CATEGORY :SEEN-<
        :TOKEN-SEMANTIC NIL
        :INPUT-STACK (#<RUNES:XSTREAM [main document :MAIN NIL]>))
     #<RUNES:XSTREAM [main document :MAIN NIL]>
     :STAG)
18: (CXML::FIX-SEEN-<
     #S(CXML::ZSTREAM
        :TOKEN-CATEGORY :SEEN-<
        :TOKEN-SEMANTIC NIL
        :INPUT-STACK (#<RUNES:XSTREAM [main document :MAIN NIL]>)))
19: (CXML::P/DOCUMENT
     #S(CXML::ZSTREAM
        :TOKEN-CATEGORY :SEEN-<
        :TOKEN-SEMANTIC NIL
        :INPUT-STACK (#<RUNES:XSTREAM [main document :MAIN NIL]>))
     #<RUNE-DOM::DOM-BUILDER {B8EB0B9}>)[:EXTERNAL]
20: ((LAMBDA (CXML::ZSTREAM))
     #S(CXML::ZSTREAM
        :TOKEN-CATEGORY :SEEN-<
        :TOKEN-SEMANTIC NIL
        :INPUT-STACK (#<RUNES:XSTREAM [main document :MAIN NIL]>)))
21: (CXML::CALL-WITH-ZSTREAM
     #<CLOSURE (LAMBDA #) {B8EE055}>
     #S(CXML::ZSTREAM
        :TOKEN-CATEGORY :SEEN-<
        :TOKEN-SEMANTIC NIL
        :INPUT-STACK (#<RUNES:XSTREAM [main document :MAIN NIL]>)))
22: (CXML::PARSE-XSTREAM
     #<RUNES:XSTREAM [main document :MAIN NIL]>
     #<RUNE-DOM::DOM-BUILDER {B8EB0B9}>)[:EXTERNAL]
23: (ROUNDS-WEB::ANALYTICS-SERVICE) ;;; This is my service I've posted the sources next
24: ((SB-PCL::FAST-METHOD HUNCHENTOOT:HANDLE-REQUEST
      (HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST))
     #<unavailable argument>
     #<unavailable argument>
     #<HUNCHENTOOT:ACCEPTOR (host *, port 8080)>
     #<HUNCHENTOOT:REQUEST {B8E8A11}>)
25: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-REQUEST (T))
     #<unavailable argument>
     #<unavailable argument>
     #<HUNCHENTOOT:REQUEST {B8E8A11}>)
26: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION
      (HUNCHENTOOT:ACCEPTOR T))
     #<unavailable argument>
     #<unavailable argument>
     #<HUNCHENTOOT:ACCEPTOR (host *, port 8080)>
     #<USOCKET:STREAM-USOCKET {B8E0B31}>)
27: ((SB-PCL::FAST-METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND
      (HUNCHENTOOT:ACCEPTOR T))
     #<unavailable argument>
     #S(SB-PCL::FAST-METHOD-CALL
        :FUNCTION #<FUNCTION #>
        :PV NIL
        :NEXT-METHOD-CALL NIL
        :ARG-INFO (2))
     #<HUNCHENTOOT:ACCEPTOR (host *, port 8080)>
     #<USOCKET:STREAM-USOCKET {B8E0B31}>)
28: ((LAMBDA ()))
29: ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK353]358))
30: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
31: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]267))
32: (SB-THREAD::CALL-WITH-MUTEX
     #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK) {B6C77205}>
     #S(SB-THREAD:MUTEX
        :NAME "thread result lock"
        :%OWNER #<SB-THREAD:THREAD "Hunchentoot worker (client: 127.0.0.1:39378)" RUNNING {B8E2391}>
        :STATE 1)
     #<SB-THREAD:THREAD "Hunchentoot worker (client: 127.0.0.1:39378)" RUNNING {B8E2391}>
     T)
33: ((LAMBDA ()))
34: ("foreign function: #x8066E3B")
35: ("foreign function: #x8052ABD")
36: ("foreign function: #x805DC00")
37: ("foreign function: #xB7FB696E")

[2011-07-06 14:20:27 [ERROR]] Error while processing connection: #<SB-SYS:FD-STREAM for "a socket" {B8E0AA1}> is closed


And here's the code for that service:

(in-package :rounds-web)

(defun split-no-last (subject by)
  (loop with last = 0
     for i = (position by subject :start last)
     if i
     collect (subseq subject last i) into parts and
     do (setf last (1+ i))
     else
       when (> (1- (length subject)) last)
       collect (subseq subject last) into parts
       end and
     return parts
     end))

(defun time-value (raw-value)
  (let* ((pos (position #\. raw-value))
(result (list (subseq raw-value 0 pos)))
(raw-length (length raw-value)))
    (if (< pos raw-length)
(append result (list (subseq raw-value (1+ pos) raw-length)))
result)))

(defun parse-name (attribute)
  ;; *round*, *category* and *event-type* are hash tables defined elsewhere
  `(,(gethash (subseq attribute 0 1) *round*)
     ,(gethash (subseq attribute 1 3) *category*)
     ,(gethash (subseq attribute 3) *event-type*)))

(defun print-attribute (stream attribute val)
  (format stream "Event: Round ~a | Category ~a | Type ~a~&"
 (first attribute)
 (second attribute)
 (third attribute))
  (loop for v in val
     for split = (time-value v)
     for time = (first split)
     for value = (if (> (length split) 1) (second split) nil)
     do (format stream "    Time: ~a, Value: ~a~&" time value)))

(defun save-parsed-events (xml)
  (with-open-file (stream "./analytics.log"
 :direction :output
 :if-exists :supersede)
    (loop for node across (dom:child-nodes xml)
       do (when (eq (dom:node-type node) :element)
   (format stream "VideoSessionId: ~a =========================================~&"
   (subseq (dom:node-name node) 1))
   (when (dom:attributes node)
     (loop with attributes = (dom:attributes node)
for n from 0 upto (1- (dom:length attributes))
for attribute = (dom:item attributes n)
do (print-attribute 
    stream (parse-name (dom:name attribute))
    (split-no-last
     (dom:get-attribute node (dom:name attribute)) #\,))))))))

(defun analytics-service ()
  (save-parsed-events
   (dom:first-child
    (cxml:parse-stream 
     (hunchentoot:raw-post-data
      :request hunchentoot:*request*
      :want-stream t)
     (cxml-dom:make-dom-builder)))))

This code isn't meant for production, all it does it mocks a real service which is meant to do the same thing so I could use it for testing, yet, I'd of course like it to work :) 
Please, if you have anything to suggest, I'd be very happy to hear!

Thanks!

Oleg