[Ironruby-core] New sockets.cs patch submission

Terence Lewis lewistm at gmail.com
Mon Jan 14 16:29:59 EST 2008


Hello list,

Please find attached another patch for Socket.cs with the following changes:

1)	Added class SocketStream : System.IO.Stream which wraps the socket
and provides some stream-like functionality which RubyIO can use. I've
tested the following methods and they appear to work well now on
sockets:
	- readline
	- readlines
	- gets
puts also works, but I'm not as confident that it's correct - see
below under "Issues". I've also included a test file I used to compare
output between ruby.exe and rbx.exe (I tested against a default
install of IE7 - which returns a 404 for the address requested and
both executables appear to produce the same output except for
line-ending issues)
2)	Fixed up the spacing/tabbing issues in the file as per Seo's
comments - everything is now 4 spaces and no tabs, and I also moved
the opening curly braces up to match the style in the rest of the
solution.

I know this code isn't perfect - but I think it is a step in the right
direction. I have some concerns about it which I've listed below - any
comments or suggestions will be most welcome.


Issues:

- Can only peek 1 byte - there is no buffering of data off the socket
- I don't know if this will have a performance / efficiency impact?
- There is no error handling code around the socket calls - is this
OK? If not, what should be done?
- The third parameter passed to RubyIO's constructor - "r+" - what
should this be? "r+" allows me to read and write to the socket through
the stream interface so maybe it's OK?
- None of the IO mode checking referred to in the TODO comment above
the SocketStream class has been implemented - I presume this means
checking whether the socket has been shutdown either for sending or
receiving before actually trying to do the read/write - instead of
letting it throw an exception.
- How should I trigger a flush on write? At the moment it's done on
seeing a newline (hard-coded) in the stream, but I don't think that's
clean or correct (certainly ruby.exe seems to send my test request
(which has 2 newlines at the end) in one go - not in two separate
pieces - which is the minor difference I referred to above regarding
"puts")..
- Not sure if Flush is efficient - should I somehow use an array
rather than a list of bytes?


Thanks for your time


Terence
-------------- next part --------------
A non-text attachment was scrubbed...
Name: socket.patch
Type: application/octet-stream
Size: 12146 bytes
Desc: not available
Url : http://rubyforge.org/pipermail/ironruby-core/attachments/20080114/5064c0ef/attachment.obj 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: basic.rb
Type: application/octet-stream
Size: 1340 bytes
Desc: not available
Url : http://rubyforge.org/pipermail/ironruby-core/attachments/20080114/5064c0ef/attachment-0001.obj 


More information about the Ironruby-core mailing list