OK, the ultimate proof:
I downloaded openseal.c, and put fprintf statements in it to keep a log of all communiation between it and XBoard. After some tries I had a game that hung almost immediately,the log of which is shown below.
openseal log wrote:FICS -> 'fics% '
FICS -> 'fics% '
FICS <- 'match fairy 1 0
'
FICS -> 'Issuing: WBtester (----) FairyMax (----) unrated lightning 1 0.
'
FICS -> 'fics% '
FICS -> '
'
FICS -> 'FairyMax accepts the match offer.
'
FICS -> '
'
FICS -> 'Creating: FairyMax (++++) WBtester (++++) unrated lightning 1 0
'
FICS -> '{Game 60 (FairyMax vs. WBtester) Creating unrated lightning match.}
'
FICS -> '
'
FICS -> '<12> rnbqkbnr pppppppp -------- -------- -------- -------- PPPPPPPP RNBQKBNR W -1 1 1 1 1 0 60 FairyMax WBtester -1 1 0 39 39 60000 60000 1 none (0:00.000) none 1 0 0
'
FICS -> 'fics% '
FICS -> '
'
FICS -> '<12> rnbqkbnr pppppppp -------- -------- -------- -----N-- PPPPPPPP RNBQKB-R B -1 1 1 1 1 1 60 FairyMax WBtester 1 1 0 39 39 60000 60000 1 N/g1-f3 (0:00.000) Nf3 1 0 0
'
FICS -> 'fics% '
FICS <- 'f7f5
kibitz !!! +0.10/6 (0.56 sec, 89368 nodes, 159 knps) PV=f7f5 c2c4 b8c6 d2d4 g8f6 b1c3
'
FICS <- 'who
'
FICS <- 'tell fairy I am stuck!
'
So it gets the initial position, and Fairy-Max' first move. Then it plays its own first move (f7f5), sends the accompanying kibitz, and then... nothing! On the other board I see that Fairy-Max has played g2-g3. Not only does that move not arrive, but WBtester also does not get confirmation of its own move (which should also result in FICS sending a board) and its kibitz (no "(kibitzed to 1 player)" or "WBtester(U)(----)[60] kibitzes: ...", like you normally get), but there is no reply to the "who" command I type later. The "tell" I type does arrive in FairyMax' console. A "tell" I type there in reply never arrives. WB tester gets not notified that FairyMax resigns, and later quits.
So this is ironclad proof that the problem is not inside XBoard. The messages just stop coming in. In this case that can be a problem in openseal (but I also had the hangs not using it) or in the OS TCP/IP support. Or in FICS...
Of course it could still be that only XBoard triggers such an error, because it sends too much data, sends it too fast, or whatever. But that then just exposes the error. The error itself lies elsewhere,