In article <20040519.205107.102564296.suuchi29 / naps.kishou.go.jp>,
  Masaki Hasegawa <masaki-h / pp.iij4u.or.jp> writes:

> # ext/socket/extconf.rb に関するものは…バグ?

> *** ext/socket/extconf.rb.org   Tue Oct 14 18:15:15 2003
> --- ext/socket/extconf.rb       Thu Apr 15 20:48:09 2004
> ***************
> *** 197,199 ****
>   if have_func("sendmsg") | have_func("recvmsg")
> !  have_struct_member('struct msghdr', 'msg_control', ['sys/types.h', 'sys/socket.h'])
>     have_struct_member('struct msghdr', 'msg_accrights', ['sys/types.h', 'sys/socket.h'])
> --- 197,199 ----
>   if have_func("sendmsg") | have_func("recvmsg")
> !  have_struct_member('struct cmsghdr', 'msg_control', ['sys/types.h', 'sys/socket.h'])
>     have_struct_member('struct msghdr', 'msg_accrights', ['sys/types.h', 'sys/socket.h'])

たとえば Linux には msghdr と cmsghdr の両方がありますが、msg_control
があるのは msghdr のほうです。cf. recvmsg(2)
したがって、この変更は不適切だと思います。

なんでこの変更が必要なんでしょうか?

また、これは send_io/recv_io に使うものですが、動くでしょうか?

% ruby -v -rsocket -e ' 
p1, p2 = UNIXSocket.pair
pid = fork {
  w = p2.recv_io
  w.print "a"
}
r, w = IO.pipe
p1.send_io(w)
w.close
p1.close
p2.close
p r.gets
r.close
Process.wait pid
'
ruby 1.9.0 (2004-05-17) [i686-linux]
"a"
-- 
[田中 哲][たなか あきら][Tanaka Akira]