Well, of course, after losing all hope, I finally get the damn phone server to work. Of course, I spent a few hours looking over logfiles wondering why all the messages were apparently getting delivered in strange orders until I realized that some of my debug printf()s were going via stderr and others via stdout... Anyway it is doing real full-duplex now, the network protocol bits work, etc, and I am happy.
Now all I have to do is adapt it to work with soundcards, which should be a lot easier since they do sane things like, duh, actually return 0 from read(2) and write(2) if their buffers are empty/full (respectively).
Also, fixed the configuration stuff for my Edinburgh Speech Tools XS stuff so it will actually compile on other people's machines, which is the first step towards finding an actual use for it. And finally started building a website for the company ... so I'll have to take "I work for a company with no website" out of my web pages :(