shugo / ruby-lang.org wrote:
> I'd like to hear others' thoughts.

Likewise.  We need to hear folks with more experience on other OSes.

> Linux's connect() does return ERESTART when it's interrupted by a signal.
> On Linux, connect() is restartable.  Please see the following page:
> 
>   http://www.madore.org/~david/computers/connect-intr.html
> 
> The above page describes connect() returns EINTR on Linux, but it seems to return ERESTART nowadays.
> (And it describes connect() returns EADDRINUSE instead of EALREADY on FreeBSD, but it returns EALREADY now.)

Interesting.  Anyways I'm not against handling ERESTART.

Note, POSIX connect manpage says this:

	If connect() is interrupted by a signal that is caught while blocked
	waiting to establish a connection, connect() shall fail and set errno
	to [EINTR], but the connection request shall not be aborted, and the
	connection shall be established asynchronously.

ref: http://pubs.opengroup.org/onlinepubs/009695399/functions/connect.html
Of course, not every system is POSIX-compliant.

Anyways, I have an alternative (v3) patch here which retries connect()
on EINTR and ERESTART:
  http://bogomips.org/ruby.git/patch?id=8f48b1862
  (also note my new switch/case style to avoid inline ifdef :)

However, I still prefer my v2 if possible:
  http://bogomips.org/ruby.git/patch?id=f5e2eb00e5