module Unicorn::HttpResponse
Public Instance Methods
httpdate()
click to toggle source
Returns a string which represents the time as rfc1123-date of HTTP-date defined by RFC 2616:
day-of-week, DD month-name CCYY hh:mm:ss GMT
Note that the result is always GMT.
This method is identical to Time#httpdate in the Ruby standard library, except it is implemented in C for performance. We always saw Time#httpdate at or near the top of the profiler output so we decided to rewrite this in C.
Caveats: it relies on a Ruby implementation with the global VM lock, a thread-safe version will be provided when a Unix-only, GVL-free Ruby implementation becomes viable.
static VALUE httpdate(VALUE self)
{
static time_t last;
time_t now = time(NULL); /* not a syscall on modern 64-bit systems */
struct tm tm;
if (last == now)
return buf;
last = now;
gmtime_r(&now, &tm);
/* we can make this thread-safe later if our Ruby loses the GVL */
snprintf(buf_ptr, buf_capa,
"%s, %02d %s %4d %02d:%02d:%02d GMT",
week + (tm.tm_wday * 4),
tm.tm_mday,
months + (tm.tm_mon * 4),
tm.tm_year + 1900,
tm.tm_hour,
tm.tm_min,
tm.tm_sec);
return buf;
}