mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/socket/ancdata.c (ancillary_timestamp): support SCM_BINTIME.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
b404c651d2
commit
e137e939b7
3 changed files with 27 additions and 2 deletions
|
@ -1,3 +1,7 @@
|
|||
Tue Feb 24 19:56:11 2009 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* ext/socket/ancdata.c (ancillary_timestamp): support SCM_BINTIME.
|
||||
|
||||
Tue Feb 24 19:45:15 2009 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* ext/socket/ancdata.c (ancillary_timestamp): new method.
|
||||
|
|
|
@ -209,6 +209,10 @@ ancillary_unix_rights(VALUE self)
|
|||
* _ancillarydata_ should be one of following type:
|
||||
* - SOL_SOCKET/SCM_TIMESTAMP (micro second) GNU/Linux, FreeBSD, NetBSD, OpenBSD, Solaris, MacOS X
|
||||
* - SOL_SOCKET/SCM_TIMESTAMPNS (nano second) GNU/Linux
|
||||
* - SOL_SOCKET/SCM_BINTIME (2**(-64) second) FreeBSD
|
||||
*
|
||||
* Note that Time cannot represent SCM_BINTIME timestamps accurately
|
||||
* because Time uses nano second as internal representation.
|
||||
*
|
||||
* Addrinfo.udp("127.0.0.1", 0).bind {|s1|
|
||||
* Addrinfo.udp("127.0.0.1", 0).bind {|s2|
|
||||
|
@ -253,6 +257,17 @@ ancillary_timestamp(VALUE self)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef SCM_BINTIME
|
||||
if (level == SOL_SOCKET && type == SCM_BINTIME &&
|
||||
RSTRING_LEN(data) == sizeof(struct bintime)) {
|
||||
struct bintime bt;
|
||||
struct timespec ts;
|
||||
memcpy((char*)&bt, RSTRING_PTR(data), sizeof(bt));
|
||||
bintime2timespec(&bt, &ts);
|
||||
result = rb_time_nano_new(ts.tv_sec, ts.tv_nsec);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (result == Qnil)
|
||||
rb_raise(rb_eTypeError, "timestamp ancillary data expected");
|
||||
|
||||
|
|
|
@ -289,7 +289,9 @@ class TestSocket < Test::Unit::TestCase
|
|||
t2 = Time.now.strftime("%Y-%m-%d")
|
||||
pat = Regexp.union([t1, t2].uniq)
|
||||
assert_match(pat, stamp.inspect)
|
||||
pat = /\.#{"%06d" % stamp.timestamp.usec}/
|
||||
t = stamp.timestamp
|
||||
assert_match(pat, t.strftime("%Y-%m-%d"))
|
||||
pat = /\.#{"%06d" % t.usec}/
|
||||
assert_match(pat, stamp.inspect)
|
||||
end
|
||||
|
||||
|
@ -314,7 +316,9 @@ class TestSocket < Test::Unit::TestCase
|
|||
t2 = Time.now.strftime("%Y-%m-%d")
|
||||
pat = Regexp.union([t1, t2].uniq)
|
||||
assert_match(pat, stamp.inspect)
|
||||
pat = /\.#{"%09d" % stamp.timestamp.nsec}/
|
||||
t = stamp.timestamp
|
||||
assert_match(pat, t.strftime("%Y-%m-%d"))
|
||||
pat = /\.#{"%09d" % t.nsec}/
|
||||
assert_match(pat, stamp.inspect)
|
||||
end
|
||||
|
||||
|
@ -334,6 +338,8 @@ class TestSocket < Test::Unit::TestCase
|
|||
t2 = Time.now.strftime("%Y-%m-%d")
|
||||
pat = Regexp.union([t1, t2].uniq)
|
||||
assert_match(pat, stamp.inspect)
|
||||
t = stamp.timestamp
|
||||
assert_match(pat, t.strftime("%Y-%m-%d"))
|
||||
end
|
||||
|
||||
end if defined?(Socket)
|
||||
|
|
Loading…
Reference in a new issue