Date | Commit message (Collapse) |
|
* adds -lnsl and -lsocket checks for OpenSolaris
|
|
Reported via private email.
(cherry picked from commit d224563823accca63fd871260e3f0dad6758c8d4)
|
|
This release fixes a race condition that could allow
Errno::EINTR to be raised even though the 2.4.0 release
was supposed to stop that.
Nobody uses Kgio.poll, really, so this shouldn't be an issue
for real code, yet.
|
|
Retry on a zero timeout if we get interrupted
even if the timeout expired. This is also what
IO.select does in Ruby itself.
|
|
== All supported platforms (*nix + MRI 1.8+, Rubinius)
* OpenBSD (and possibly other *BSD) fixes, thanks to Jeremy Evans.
* kgio_accept and kgio_tryaccept now take an optional second argument
for flags (like the accept4() flags argument).
== Ruby 1.9-only things
* Kgio.poll no longer raises Errno::EINTR to match IO.select.
== Ruby 1.9 trunk things
* close() on an active FD in a different thread is better
handled/detected.
* copy-on-write for strings is properly triggered
|
|
These aren't well-defined semantics...
|
|
This is needed under Ruby trunk if the string is not actually
resized.
|
|
This allows callers to modify the pollset, interrupt
the polling thread, and then poll with the modified
pollset. This is also important for dealing with
closed IO objects that may have been invalidated
due to GC, too.
|
|
OpenBSD seems to make connect() return success immediately even
on a non-blocking socket, so it's hard to test for.
Thanks to Jeremy Evans to reporting the issue under OpenBSD.
ref: http://mid.gmane.org/20110505181846.GB9693@jeremyevans.local
|
|
Fix kgio_peek by adding an empty kgio_autopush_recv
if !KGIO_NOPUSH.
ref: http://mid.gmane.org/20110505181846.GB9693@jeremyevans.local
Acked-by: Eric Wong <normalperson@yhbt.net>
|
|
Some systems like OpenBSD are stricter about irrelevant
fields than GNU/Linux.
[ew: commit message]
ref: http://mid.gmane.org/20110505181846.GB9693@jeremyevans.local
Acked-by: Eric Wong <normalperson@yhbt.net>
|
|
This changes our semantics, but it's unlikely anybody
relies on EINTR right now...
|
|
I didn't know this about mkmf at the time...
|
|
Documenting the new flags options and also improving
style of the existing class overrides.
|
|
Not fun on slow systems, unfortunately...
|
|
|
|
Some systems are slower than others...
|
|
|
|
RubyGems handles it already
|
|
Ruby 1.9.3dev has better support for it
|
|
Another thread may have killed the descriptor.
|
|
Another thread may have killed the acceptor object.
|
|
This allows applications to not rely on global accept4_flags
|
|
Don't force people to rely on global flags, there may be
blocking parts of an otherwise non-blocking program...
|
|
|
|
We no longer over-allocate memory for Kgio.poll (1.9.x-only).
Under Ruby 1.9.3dev, we also use rb_thread_io_blocking_region
to properly deal with cross-thread IO#close.
|
|
Oops, fortunately we allocated too much and not too little.
|
|
It's in Ruby 1.9.3dev and tracks waiting FDs on blocked threads.
|
|
Much nicer this way...
|
|
Thanks to Jeremy Evans, this release fixes the build under OpenBSD.
|
|
OpenBSD's getnameinfo(3) requires the sys/types.h header file, and
including it should not cause a problem for other OSes.
Acked-by: Eric Wong <normalperson@yhbt.net>
|
|
* connect.c: disable AI_NUMERICSERV
It's not needed since we already verify the service is a
numeric port. AI_NUMERICSERV is not available in older glibc
(<2.3.4) and probably other old systems.
|
|
It's not needed since we already verify the service is a
numeric port. AI_NUMERICSERV is not available in older glibc
(<2.3.4) and probably other old systems.
|
|
recv() with MSG_PEEK for sockets is added with the try*
interface. SocketMethods#kgio_trypeek and
SocketMethods#kgio_peek or Kgio.trypeek for non-Kgio-enabled
sockets.
For Ruby 1.9 only: poll(2) is exposed via the Kgio.poll
singleton method and should provide an alternative for IO.select
users.
Both of these new features should work well on modern Unix-like
operating systems.
|
|
We may use poll elsewhere...
|
|
* Fixes Ruby 1.9.3dev deprecation warnings
* Fixes some documentation dependency issues
* Allows RUBY_TEST_OPTS to be passed to unit tests
|
|
Whee!
|
|
Oops
|
|
|
|
It's a nice alternative to IO.select for higher-numbered
file descriptors, especially sparse ones. Our interface
also generates less garbage than IO.select does.
|
|
Kgio.trypeek, kgio_trypeek and kgio_peek methods are added
for using with sockets.
|
|
* sockets accept()ed by a TCP_NOPUSH/TCP_CORK listener
automatically flush on kgio_*read calls if there is pending
data. "Kgio.autopush = false" disables this globally,
and Kgio::Socket also get "kgio_autopush=" to enable/disable
on a per-object individual basis.
* ECONNRESET exceptions get empty backtraces for kgio_*read.
There's nothing a programmer can do about these, so there's
no point in going through the expensive backtrace generation
process.
* Kgio.try* singleton methods added for working with non-Kgio
enhanced objects. No more needing to use Object#extend
and blowing away your method cache to make existing I/O
objects kinder and gentler.
* IPv6 support should be complete, systems without a native
getaddrinfo(3) are now unsupported (and will remain so
unless somebody complains).
There should be no other backwards-incompatible changes other
than requiring getaddrinfo(3) and friends for IPv6 support.
|
|
This refreshes (or sets) the @kgio_addr ivar for sockets
that didn't go through kgio_accept or kgio_tryaccept.
|
|
Oops, RTFE :P
|
|
No extra #ifdefs, we just won't support old systems without
getaddrinfo() and friends anymore. I doubt anybody still has
them...
|
|
Needless calls to rb_intern are wasteful in even semi-frequently
used code.
|
|
There's nothing a programmer can do about ECONNRESET
so just make the exception cheaper to raise so it
can still be logged.
|
|
This allows people to more easily use Kgio in existing apps.
|
|
Might as well allow clients to efficiently handle
TCP_CORK/TCP_NOPUSH, too.
|
|
TCP_CORK (and presuably TCP_NOPUSH) aren't remotely useful in
Rainbows! without this and there's almost no overhead for MRI,
either.
|