From: ara.t.howard@... Date: 2006-02-02T05:22:28+09:00 Subject: Re: IO and non-strings --------------050008050507030801040101 Content-Type: MULTIPART/Mixed; BOUNDARY=------------050008050507030801040101 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --------------050008050507030801040101 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; format=flowed Content-ID: On Thu, 2 Feb 2006, Joel VanderWerf wrote: > ara.t.howard@noaa.gov wrote: >> On Thu, 2 Feb 2006, Joel VanderWerf wrote: >> >>> I am in the habit of using send/recv, which are unbuffered, and also >>> sending a length field before the data. If you're interested, I've got a >>> couple of classes (subclasses of TCPSocket and TCPServer) that >>> encapsulate this and are pretty well tested. (Also a C version of the >>> same thing.) >> >> please share! i just wrote that, for like the 10th time, last month ;-) >> >> -a >> > > MTCP -- Message TCP -- Wrapper around TCPSocket and TCPServer that > provides a message (datagram) abstraction implemented by data stream > with added length fields. > > Here's the ruby version, attached. There's a tarball at > http://redshift.sourceforge.net/mtcp/ > with the full deal: c version, tests for both, etc. The c version works > with both blocking and non-blocking sockets. The c lib code works on > windows, but the test doesn't (it forks). It's fine on linux and qnx. > The ruby version works on all platforms I've tried (windows and linux). > > -- > vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407 sweet! thanks joel. -a -- happiness is not something ready-made. it comes from your own actions. - h.h. the 14th dali lama --------------050008050507030801040101 Content-Type: APPLICATION/X-RUBY; NAME=mtcp.rb Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: INLINE; FILENAME=mtcp.rb cmVxdWlyZSAnc29ja2V0JwoKIyA9PT0gTVRDUCAtLSBNZXNzYWdlIFRDUAojCiMgV3JhcHBl ciBhcm91bmQgVENQU29ja2V0IGFuZCBUQ1BTZXJ2ZXIgdGhhdCBwcm92aWRlcyBhIG1lc3Nh Z2UgKGRhdGFncmFtKQojIGFic3RyYWN0aW9uIGltcGxlbWVudGVkIGJ5IGRhdGEgc3RyZWFt Lgptb2R1bGUgTVRDUAoKICBjbGFzcyBNZXNzYWdlTGVuZ3RoRXJyb3IgPCBTdGFuZGFyZEVy cm9yOyBlbmQKICBjbGFzcyBNZXNzYWdlVW5kZXJmbG93IDwgU3RhbmRhcmRFcnJvcjsgZW5k CgogICMgT3ZlcnJpZGVzIHNvbWUgbWV0aG9kcyB0byBnaXZlIG1lc3NhZ2Utb3JpZW50ZWQg YmVoYXZpb3IgdG8gYSBzdHJlYW0tCiAgIyBvcmllbnRlZCBwcm90b2NvbC4KICBtb2R1bGUg TWVzc2FnZWFibGUKCiAgICBNQVhMRU4gID0gNjU1MzUgIyMjIDwtLS0gY29uZmlndXJlIGFz IGRlc2lyZWQhCiAgICBMRU5fTEVOID0gWzBdLnBhY2soIk4iKS5zaXplCgogICAgIyBTZW5k IGEgbWVzc2FnZSBvdmVyIHRoZSBzb2NrZXQuIFRoZSBtZXNzYWdlIGlzIGxpa2UgYSBkYXRh Z3JhbSByYXRoZXIKICAgICMgdGhhbiBhIHN0cmVhbSBvZiBkYXRhLgogICAgZGVmIHNlbmRf bWVzc2FnZShtZXNzYWdlKQogICAgICBsZW4gPSBtZXNzYWdlLmxlbmd0aAogICAgICBpZiBs ZW4gPiBNQVhMRU4KICAgICAgICByYWlzZSBNZXNzYWdlTGVuZ3RoRXJyb3IsICJNQVhMRU4g ZXhjZWVkZWQ6ICN7bGVufSA+ICN7TUFYTEVOfSIKICAgICAgZW5kCiAgICAgIHNlbmQoW2xl bl0ucGFjaygiTiIpLCAwKQogICAgICBzZW5kKG1lc3NhZ2UsIDApCiAgICBlbmQKCiAgICAj IFJlY2VpdmUgYSBtZXNzYWdlIGZyb20gdGhlIHNvY2tldC4gUmV0dXJucyArbmlsKyB3aGVu IHRoZXJlIGFyZSBubwogICAgIyBtb3JlIG1lc3NhZ2VzICh0aGUgd3JpdGVyIGhhcyBjbG9z ZWQgaXRzIGVuZCBvZiB0aGUgc29ja2V0KS4KICAgIGRlZiByZWN2X21lc3NhZ2UKICAgICAg aWYgKGRhdGEgPSByZWN2KExFTl9MRU4pKQogICAgICAgIGlmIGRhdGEuZW1wdHk/CiAgICAg ICAgICBuaWwKICAgICAgICBlbHNlCiAgICAgICAgICBsZW4gPSBkYXRhLnVucGFjaygiTiIp WzBdCiAgICAgICAgICBpZiBsZW4gPiBNQVhMRU4KICAgICAgICAgICAgcmFpc2UgTWVzc2Fn ZUxlbmd0aEVycm9yLCAiTUFYTEVOIGV4Y2VlZGVkOiAje2xlbn0gPiAje01BWExFTn0iCiAg ICAgICAgICBlbmQKICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgIG1zZyA9ICIiCiAgICAg ICAgICAgIHBhcnQgPSBuaWwKICAgICAgICAgICAgd2hpbGUgbXNnLmxlbmd0aCA8IGxlbiBh bmQgKHBhcnQgPSByZWN2KGxlbikpCiAgICAgICAgICAgICAgaWYgcGFydC5sZW5ndGggPT0g MCAjIyB3aGF0IGNhdXNlcyB0aGlzPwogICAgICAgICAgICAgICAgcmFpc2UgTWVzc2FnZVVu ZGVyZmxvdywKICAgICAgICAgICAgICAgICAgIlBlZXIgY2xvc2VkIHNvY2tldCBiZWZvcmUg ZmluaXNoaW5nIG1lc3NhZ2UgLS0iICsKICAgICAgICAgICAgICAgICAgIiByZWNlaXZlZCAj e21zZy5sZW5ndGh9IG9mICN7bGVufSBieXRlczpcbiIgKwogICAgICAgICAgICAgICAgICBt c2dbMC4uOTldLnVucGFjaygiSCoiKVswXSArICIuLi4iCiAgICAgICAgICAgICAgZW5kCiAg ICAgICAgICAgICAgbXNnIDw8IHBhcnQKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIG1z Zy5lbXB0eT8gPyBuaWwgOiBtc2cKICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICBl bmQKICAgIGVuZAogIGVuZAoKICBjbGFzcyBTb2NrZXQgPCBUQ1BTb2NrZXQKICAgIGluY2x1 ZGUgTWVzc2FnZWFibGUKICBlbmQKCiAgY2xhc3MgU2VydmVyIDwgVENQU2VydmVyCiAgICBp bmNsdWRlIE1lc3NhZ2VhYmxlCgogICAgaWYgZGVmaW5lZD8oRXJybm86OkVQUk9UTykKICAg ICAgRXByb3RvID0gRXJybm86OkVQUk9UTwogICAgZWxzZQogICAgICBjbGFzcyBFcHJvdG8g PCBFeGNlcHRpb247IGVuZAogICAgZW5kCgogICAgIyBUaGUgc2FtZSBhcyBUQ1BTZXJ2ZXIj YWNjZXB0LCBidXQgcmV0dXJucyBhIE1UQ1A6OlNvY2tldCBpbnN0ZWFkLgogICAgIyBBbHNv LCBhdXRvbWF0aWNhbGx5IHJldHJpZXMgb24gRVBST1RPLgogICAgZGVmIGFjY2VwdAogICAg ICBTb2NrZXQuZm9yX2ZkKHN5c2FjY2VwdCkKICAgIHJlc2N1ZSBFcHJvdG8KICAgICAgcmV0 cnkKICAgIGVuZAoKICAgIGRlZiBzZWxmLm9wZW4oKmFyZ3MpCiAgICAgIHN1cGVyCiAgICBy ZXNjdWUgU3lzdGVtQ2FsbEVycm9yID0+IGUKICAgICAgZS5tZXNzYWdlIDw8ICIgLS0gd2Fz IHRyeWluZyAje2FyZ3Muam9pbigiOiIpfSIKICAgICAgcmFpc2UgZQogICAgZW5kCgogICAg ZGVmIHNlbGYubmV3KCphcmdzKQogICAgICBzdXBlcgogICAgcmVzY3VlIFN5c3RlbUNhbGxF cnJvciA9PiBlCiAgICAgIGUubWVzc2FnZSA8PCAiIC0tIHdhcyB0cnlpbmcgI3thcmdzLmpv aW4oIjoiKX0iCiAgICAgIHJhaXNlIGUKICAgIGVuZAogIGVuZAoKZW5kCg== --------------050008050507030801040101-- --------------050008050507030801040101--