00:10:44  * beachdog_joined
00:11:52  <piscisaureus_>bnoordhuis: another linux question... does your include/sys/epoll.h define EPOLLRDHUP ?
00:12:02  <bnoordhuis>piscisaureus_: yes
00:12:11  <bnoordhuis>provided your kernel is new enough
00:13:16  <bnoordhuis>piscisaureus_: or are you specifically asking about the kernel headers on my local system?
00:13:34  * beachdogquit (Ping timeout: 245 seconds)
00:14:48  <piscisaureus_>bnoordhuis: ya
00:15:02  <piscisaureus_>bnoordhuis: on my system it's not there, and I am on a reasonably recent kernel
00:15:08  <piscisaureus_>3.0.17 to be exact
00:15:14  <bnoordhuis>https://github.com/joyent/node/pull/3931#issuecomment-8110159 <- this guy...
00:15:37  <bnoordhuis>piscisaureus_: EPOLLRDHUP is much older than that
00:15:43  <bnoordhuis>so it should be there somewhere
00:15:53  <bnoordhuis>try `grep -r EPOLLRDHUP /usr/include`
00:16:44  <bnoordhuis>"Interesting all these cosmetic details, then just disregard the pull request" <- because a memory leak is a cosmetic detail
00:17:40  <piscisaureus_>hmm, I must've been looking at the wrong place
00:17:51  <piscisaureus_>. /usr/include/x86_64-linux-gnu/sys/epoll.h defines it
00:19:56  <piscisaureus_>bnoordhuis: yeah, I don't understand what his problem is
00:21:29  <piscisaureus_>Ayms merged commit 0285dae into joyent:master from Ayms:master an hour ago o_O
00:21:47  <bnoordhuis>that's just github being silly, it gets confused easily
00:30:41  <rvagg>bnoordhuis: is that the guy you were telling to fix up line spacing and character padding? he must have just got a bit offended at your bluntness
00:36:13  * joshthecoderquit (Quit: Leaving...)
00:37:31  <CIA-131>node: Ben Noordhuis master * re4cef1a / (doc/api/assert.markdown lib/assert.js): doc: update assert.doesNotThrow() docs - http://git.io/_5jALQ
00:38:03  <bnoordhuis>rvagg: yes, that guy
00:48:45  * Ariajoined
00:51:03  * dapquit (Quit: Leaving.)
01:00:29  * perezdquit (Quit: perezd)
01:09:06  * bnoordhuisquit (Ping timeout: 240 seconds)
01:15:59  * ArmyOfBrucequit (Excess Flood)
01:16:26  * ArmyOfBrucejoined
01:19:25  * joshthecoderjoined
01:34:05  * ArmyOfBrucequit (Excess Flood)
01:34:35  * ArmyOfBrucejoined
01:35:35  * perezdjoined
01:36:56  * TooTallNatequit (Quit: ["Textual IRC Client: www.textualapp.com"])
02:04:39  * ericktjoined
02:20:10  * abraxasjoined
02:26:47  * avalanche123joined
02:28:22  * brsonquit (Quit: leaving)
02:28:28  * avalanche123quit (Client Quit)
02:29:09  * dshaw_joined
02:32:34  <CIA-131>libuv: Shigeki Ohtsu master * r09faee4 / test/test-spawn.c : windows: fix environment_creation test - http://git.io/xAmJ_Q
02:34:17  * travis-cijoined
02:34:17  <travis-ci>[travis-ci] joyent/libuv#634 (master - 09faee4 : Shigeki Ohtsu): The build passed.
02:34:17  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/abc945bc04bc...09faee40eb6d
02:34:17  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/2268154
02:34:17  * travis-cipart
03:32:14  <piscisaureus_>oh my
03:32:16  <piscisaureus_>time to check out
03:32:22  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
03:53:45  * avalanche123joined
03:57:02  * avalanche123quit (Client Quit)
04:00:46  * beachdog_quit (Ping timeout: 240 seconds)
04:30:00  * perezdquit (Quit: perezd)
04:39:39  * Ariaquit (Quit: And now to get up really early for a deploy.)
04:40:25  * perezdjoined
04:59:30  * ericktquit (Quit: erickt)
05:05:26  * mikealjoined
05:09:36  * avalanche123joined
05:13:53  * ibobrikjoined
05:36:21  * avalanche123quit (Quit: Computer has gone to sleep.)
05:37:06  * avalanche123joined
05:40:11  * loladiroquit (Quit: loladiro)
05:46:27  * ibobrikquit (Quit: ibobrik)
05:57:37  * dshaw_quit (Quit: Leaving.)
06:17:41  * dshaw_joined
06:20:57  * ibobrikjoined
06:22:36  * creationixquit (Read error: Operation timed out)
06:42:25  * hzjoined
06:50:58  * paddybyersjoined
06:51:27  * paddybyersquit (Client Quit)
06:53:28  * paddybyersjoined
06:57:10  * creationixjoined
06:59:31  * avalanche123quit (Quit: Computer has gone to sleep.)
07:05:50  * rendarjoined
07:16:42  * joshthecoderquit (Quit: Linkinus - http://linkinus.com)
07:17:57  * paddybyersquit (Quit: paddybyers)
07:21:53  * paddybyersjoined
07:44:39  * dshaw_quit (Quit: Leaving.)
07:50:38  * hzquit
07:56:43  * creationixquit (Ping timeout: 246 seconds)
08:03:42  * creationixjoined
08:13:46  * `3rdEdenjoined
08:14:08  * tjfontainequit (Ping timeout: 276 seconds)
08:14:14  * ArmyOfBrucequit (Ping timeout: 264 seconds)
08:22:19  * ArmyOfBrucejoined
08:22:24  * tjfontainejoined
08:22:48  * tjfontainechanged nick to Guest23733
08:26:25  * ArmyOfBrucequit (Ping timeout: 244 seconds)
08:26:50  * Guest23733quit (Ping timeout: 264 seconds)
08:28:11  * tjfontai1ejoined
08:28:55  * ArmyOfBrucejoined
08:32:24  * ArmyOfBrucequit (Excess Flood)
08:32:52  * ArmyOfBrucejoined
08:45:27  * hzjoined
08:58:38  * ArmyOfBrucequit (Ping timeout: 264 seconds)
09:00:17  * tjfontai1equit (Ping timeout: 265 seconds)
09:01:58  * tjfontai1ejoined
09:03:03  * ArmyOfBrucejoined
09:03:47  * ArmyOfBrucequit (Excess Flood)
09:04:15  * ArmyOfBrucejoined
09:10:39  * ArmyOfBrucequit (Ping timeout: 245 seconds)
09:11:07  * ArmyOfBrucejoined
09:18:37  * ArmyOfBrucequit (Ping timeout: 248 seconds)
09:19:43  * tjfontai1equit (Ping timeout: 245 seconds)
09:22:31  * ArmyOfBrucejoined
09:26:36  * AndreasMadsenjoined
09:27:59  * tjfontainejoined
09:28:23  * tjfontainechanged nick to Guest87284
09:31:38  * ArmyOfBrucequit (Ping timeout: 264 seconds)
09:33:07  * Guest87284quit (Ping timeout: 246 seconds)
09:37:47  * ArmyOfBrucejoined
09:41:24  * tjfontai1ejoined
10:17:38  * creationixquit (Ping timeout: 245 seconds)
10:26:40  * `3rdEdenquit (Quit: Linkinus - http://linkinus.com)
10:31:33  * hzquit (Ping timeout: 272 seconds)
10:39:16  * loladirojoined
10:40:57  * loladiroquit (Client Quit)
10:48:14  * hzjoined
10:52:26  * AndreasMadsenquit (Remote host closed the connection)
11:09:25  * bnoordhuisjoined
11:10:58  <bnoordhuis>one thing that still doesn't work with 3.6-rc3 is reconnecting to the wireless network after resume from suspend
11:11:14  <bnoordhuis>but where would the fun in OSS be if all bugs were fixed?
11:12:26  <bnoordhuis>indutny: you there?
11:12:28  <saghul>not even after reloading the module?
11:12:49  <bnoordhuis>saghul: yes, that fixes it - but it's kind of silly, having to do that
11:13:02  <saghul>bnoordhuis indeed...
11:15:14  * creationixjoined
11:15:46  <indutny>bnoordhuis: yeah
11:16:04  <indutny>bnoordhuis: almost
11:16:29  <bnoordhuis>indutny: re signed/unsigned, why are you using off_t?
11:16:44  <bnoordhuis>i consider that a small abomination unto $DEITY
11:17:08  <indutny>em...
11:17:28  <indutny>basically, what if offset_ goes negative
11:17:37  <bnoordhuis>then you're doing it wrong?
11:17:39  <indutny>if it's unsigned - all my checks will silently be invalid
11:17:52  <bnoordhuis>when/why would offset_ go negative?
11:17:54  <indutny>bnoordhuis: yes, but...
11:18:04  <bnoordhuis>you mean if it wraps around?
11:18:12  <indutny>bnoordhuis: yep
11:18:21  <bnoordhuis>signed overflow is undefined, fedor...
11:18:41  <bnoordhuis>remember that INT_MAX+1 joke i made yesterday?
11:20:34  <indutny>bnoordhuis: ah, that what you meant by wraps around
11:20:41  <indutny>bnoordhuis: no, I wasn't talking about that
11:21:09  <bnoordhuis>indutny: okay. so what *were* you talking about? :)
11:27:57  * TheJHjoined
11:30:59  <bnoordhuis>indutny: rereading the PR, i see what you mean
11:31:12  <bnoordhuis>but i don't consider that good style
11:31:54  <bnoordhuis>at least, i assume you're talking about checks like this one?
11:31:54  <bnoordhuis>+ offset_ = offset_ - body_offset_ - frame_len_;
11:31:55  <bnoordhuis>+ assert(offset_ >= 0);
11:32:49  <bnoordhuis>i'd rewrite that as assert(offset >= body_offset_ + frame_len); offset_ -= body_offset_ + frame_len;
11:41:49  * mmaleckiquit (Read error: Connection reset by peer)
11:47:22  * mmaleckijoined
11:50:50  * ibobrikquit (Quit: ibobrik)
11:50:54  * `3rdEdenjoined
11:53:00  * Benviequit
11:53:32  * loladirojoined
11:54:29  * loladiroquit (Client Quit)
11:57:38  * loladirojoined
11:59:31  * loladiroquit (Client Quit)
12:06:48  <indutny>bnoordhuis: ok
12:15:30  * ibobrikjoined
12:46:25  * loladirojoined
12:57:21  * piscisaureus_joined
13:11:38  * loladiroquit (Quit: loladiro)
13:13:10  * loladirojoined
13:14:35  * loladiroquit (Client Quit)
13:26:11  * loladirojoined
13:27:38  * piscisaureus_quit (Ping timeout: 245 seconds)
13:31:47  * loladiroquit (Quit: loladiro)
13:42:23  * mmaleckichanged nick to mmalecki[away]
13:44:14  * `3rdEdenquit (Quit: Leaving...)
13:47:45  * `3rdEdenjoined
14:04:31  * c4milojoined
14:08:13  * tjfontai1echanged nick to tjfontaine
14:10:34  * `3rdEdenquit (Quit: Leaving...)
14:15:19  * AndreasMadsenjoined
14:17:59  * mikealquit (Quit: Leaving.)
14:34:12  * dapjoined
14:36:11  * mmalecki[away]changed nick to mmalecki
14:43:48  * tomshredsjoined
14:50:07  * philips_quit (Excess Flood)
14:53:17  * philips_joined
14:56:14  * tomshredsquit (Ping timeout: 264 seconds)
15:04:27  * tomshredsjoined
15:18:33  * mikealjoined
15:28:57  * c4miloquit (Remote host closed the connection)
15:29:38  * c4milojoined
15:31:29  * ArmyOfBrucequit (Excess Flood)
15:31:58  * ArmyOfBrucejoined
15:38:29  * `3rdEdenjoined
15:40:48  * perezdquit (Quit: perezd)
15:43:02  * `3rdEdenquit (Ping timeout: 264 seconds)
15:44:23  * ibobrikquit (Quit: ibobrik)
15:54:32  * AndreasMadsenquit (Remote host closed the connection)
16:10:03  * mcavagejoined
16:10:24  * piscisaureus_joined
16:12:35  <piscisaureus_>hey
16:12:47  <piscisaureus_>did the call move to today?
16:13:34  <bnoordhuis>piscisaureus_: i think so
16:13:54  <piscisaureus_>is isaacs around or did he go to nodecamp already
16:14:10  <bnoordhuis>no idea. it's been very quiet today
16:14:16  <bnoordhuis>which may be an indication
16:14:19  <AvianFlu>nodecamp is next week, so it's at least not that :)
16:14:56  * mikealquit (Quit: Leaving.)
16:15:19  <isaacs>bnoordhuis: https://github.com/bnoordhuis/node/compare/debian
16:15:27  <isaacs>bnoordhuis: the inspiration for package.json ^
16:16:09  <isaacs>i'm around
16:16:12  <tjfontaine>heh I actually prefer it to spec's which can get quite gruesome
16:16:16  <isaacs>yes, the call moved to today
16:16:24  <isaacs>45 minutes
16:16:29  <piscisaureus_>ah ok
16:22:09  * joshthecoderjoined
16:22:18  * ericktjoined
16:28:51  <isaacs>Error: Can't set headers after they are sent.
16:28:55  <isaacs>This is super annoying ^
16:29:02  <indutny>haha
16:29:08  <isaacs>seriously
16:29:11  <indutny>happens to everyone time to time
16:29:20  <isaacs>oh, it happens to me at least hourly
16:29:31  <isaacs>a) there's no way to tell when the headers have been sent.
16:29:35  * ibobrikjoined
16:29:39  <isaacs>No event, no non-private flag.
16:29:45  <isaacs>b) who cares? just no-op it.
16:33:09  <ryah>headers are sent when the first bit of the body is sent
16:33:28  <ryah>seems like you should be able to tell when they are sent
16:36:00  <indutny>no-op ++
16:36:21  <indutny>bnoordhuis: btw, I was thinking about ryah's concept
16:36:34  <indutny>probably I'll try patching openssl first, before landing this ugly hack in node.js
16:36:35  <bnoordhuis>indutny: what concept?
16:36:41  <bnoordhuis>oh, that concept
16:36:43  <indutny>bnoordhuis: about async tls sessions
16:36:52  <indutny>yeah
16:36:55  <indutny>ryah: ++
16:38:32  <bnoordhuis>man... event ports is so full of bugs...
16:38:54  <bnoordhuis>EINTR and ETIME are not real errors, events may still be copied out
16:39:01  * perezdjoined
16:39:09  <bnoordhuis>sometimes the kernel updates the nget out parameter, sometimes it doesn't
16:39:19  <bnoordhuis>how did sun manage to fuck it up so bad?
16:43:58  <indutny>bnoordhuis: http://developers.sun.com/solaris/articles/event_completion.html?
16:44:07  <bnoordhuis>indutny: yep
16:44:19  <indutny>bnoordhuis: you know better
16:44:31  <indutny>bnoordhuis: I've one server, but this is not a real experience
16:44:41  <indutny>I need a mainframe
16:44:41  <bnoordhuis>indutny: what do you mean?
16:44:43  <indutny>here at my home
16:44:56  <indutny>with keyboard and crt monitor
16:46:50  <bnoordhuis>dap: you were involved in the ports api, weren't you?
16:47:59  <dap>bnoordhuis: Not in the original implementation. I found several of those bugs during my internship, and had that whole interface rewritten in a lost workspace at the end of the summer…. but yes, I'm pretty familiar with the interface, and some of those bugs are embarassingly bad.
16:48:21  <dap>AFAIK, they can all be worked around, but it's indeed tricky to get right.
16:48:27  <bnoordhuis>dap: hah, okay. good to know i'm not the only one who thinks so :)
16:48:36  <dap>They're all implementation issues, too. I think the interface is fine.
16:48:55  <dap>BTW, you may find portsnoop useful: https://github.com/davepacheco/portsnoop
16:49:02  <bnoordhuis>well... the EINTR/ETIME think is so un-unix-y
16:49:05  <bnoordhuis>*thing
16:49:23  <bnoordhuis>ah, nice - thanks
16:49:57  <piscisaureus_>isaacs: re no-op setting headers...
16:50:19  <piscisaureus_>isaacs: doesn't that make for WTF bugs where headers are not sent even though the user is sure he/she set it?
16:50:34  <dap>bnoordhuis: Yeah, ETIME with events returned is awful.
16:51:16  <isaacs>piscisaureus_: maybe
16:51:23  <isaacs>piscisaureus_: but is that worse than crashing the server?
16:51:36  <piscisaureus_>isaacs: ehm, maybe :-)
16:52:23  <piscisaureus_>isaacs: to put this godwin back here: isn't that what the php guys though when they make write_file_contents fail silently?
16:52:35  <piscisaureus_>isaacs: a warning would be nice, at least
16:52:48  <piscisaureus_>isaacs: or a way to check whether headers are sent
16:53:18  <isaacs>piscisaureus_: yes, if (!res.headerSent)...
16:53:33  <isaacs>piscisaureus_: or res.setHeader('foo', 'bar', booleanYesIamOKwithNotThrowing)
16:54:53  <piscisaureus_>or send them as trailers :-p
16:56:49  <indutny>spdy headers
16:58:11  * pooyajoined
16:59:19  * mcavagequit (Remote host closed the connection)
16:59:34  <isaacs>bnoordhuis: skype?
16:59:45  <ibobrik>throwing is okay. it's better than "WTF where is my content-length header that i sent after body?"
16:59:45  <bnoordhuis>isaacs: yep, starting it now
16:59:47  * mcavagejoined
16:59:56  <ibobrik>this may also emit "error" on response
17:00:15  <isaacs>i kind of look at http as a sort of sloppy best-effort kind of thing
17:00:39  <isaacs>the problem is that this throw almost always happens because some error handler tries to set a header, but the response already was in a semi-sent state when the error occurred.
17:00:45  <isaacs>so now your error handler throws, and restarts the server.
17:00:49  <isaacs>PROBLEM SOLVED!
17:01:57  <piscisaureus_>bnoordhuis: meeeeetinggggg
17:02:00  <isaacs>indutny: skype?
17:02:10  <bnoordhuis>piscisaureus_: i'm logged in
17:03:34  <piscisaureus_>pick up bnoordhuis
17:04:38  * mcavagequit (Ping timeout: 264 seconds)
17:04:59  * loladirojoined
17:10:57  * stagasjoined
17:15:53  * tomshredsquit (Quit: Leaving...)
17:16:01  * loladiroquit (Quit: loladiro)
17:19:00  <creationix>ever seen an issue where fs.open errored out with ENOTDIR?
17:19:20  <creationix>I'm getting it with uv 0.8-17
17:19:23  <creationix>in luvit
17:20:17  <creationix>I get it when one segment in my path is a valid file, but I treat it as a folder
17:20:22  * loladirojoined
17:20:24  <creationix>I would have expected ENOENT in that case
17:20:57  <dap>creationix: POSIX open says that's ENOTDIR
17:21:42  <dap>Not necessarily that it has to be, but that ENOTDIR may be returned when "a component of the path prefix is not a directory".
17:22:49  <dap>isaacs: Sounds like a legitimate problem with the error handling, if the program encounters an error partway through sending a response and doesn't know what to do (can't send an error response, and doing nothing at all may also be wrong). I don't see how Node core can know whether that's fatal to my application. I had a case like this pretty recently, where the conclusion was that I wanted to close the socket prematurely so the client knew s
17:23:19  <tjfontaine>dap: your statement cut off at "client knew s"
17:23:26  <dap>tjfontaine: thanks.
17:23:42  <dap>…so the client knew something bad had happened.
17:24:03  <isaacs>dap: yeah. killing the socket is a good idea, probably
17:24:32  * tomshredsjoined
17:24:40  <dap>That is, I actually don't want Node to assume anything about whether I care about this error or not
17:25:09  <dap>Actually, that's not it. It's that I'd consider this a legit error (to throw on)
17:25:09  <piscisaureus_>isaacs: bnoordhuis: indutny: next week I'm not going to warn you. You should hang up when I go crazy on smalltalk
17:25:30  <dap>Because that gives me the chance to ignore it, or treat it as a bug in my program.
17:25:42  <dap>Ideally, there'd be a way to avoid running into it...
17:28:04  <isaacs>piscisaureus_: 2 weeks
17:28:08  <isaacs>piscisaureus_: next week i'll be in the woods.
17:28:13  <isaacs>you all can call one another, though :)
17:28:27  <isaacs>piscisaureus_: also: next time i'm not going to hang up. i'll just start recording it.
17:28:33  <isaacs>piscisaureus_: we can use it as the intro music on #nodeup
17:28:47  <piscisaureus_>isaacs: yeah, that'd be nice
17:28:53  <piscisaureus_>isaacs: i can do some singing
17:29:12  <piscisaureus_>maybe just a cover of "your commit message sucks"
17:32:59  * `3rdEdenjoined
17:33:04  * `3rdEdenquit (Remote host closed the connection)
17:34:30  * loladiroquit (Quit: loladiro)
17:39:07  * TooTallNatejoined
17:39:16  * tommybergeronjoined
17:39:38  * `3rdEdenjoined
17:40:38  * tomshredsquit (Ping timeout: 264 seconds)
17:42:07  <indutny>piscisaureus_: ok
17:42:23  <indutny>bnoordhuis: piscisaureus_: lets make a call next week anyway
17:42:28  <indutny>I'll lead
17:42:30  <indutny>on russian
17:42:31  <piscisaureus_>ok
17:54:32  * brsonjoined
17:54:41  * mikealjoined
17:57:31  <isaacs>bnoordhuis: i forget, what's the thing to disable client renegotiation entirely?
17:58:03  <isaacs> require('tls').CLIENT_RENEG_LIMIT = 0
17:58:04  <isaacs>?
17:58:08  * mcavagejoined
17:58:11  <bnoordhuis>isaacs: yes
17:59:17  <isaacs>ohh... probably has to be set in the master process, not in the cluster worker
17:59:25  <isaacs>since it's the socket setup that matters
18:01:02  <piscisaureus_>want: a libuv handle that notifies changes to hosts file and/or dns settings
18:01:16  <piscisaureus_>this would be quite nice for making a better dns server
18:02:26  <piscisaureus_>er, a better dns client ...
18:05:01  <bnoordhuis>isaacs: what package on smartos contains ab?
18:05:05  <bnoordhuis>apr-utils?
18:06:23  * ibobrikquit (Quit: ibobrik)
18:07:12  <mmalecki>bnoordhuis: there's no such package
18:07:29  * bnoordhuisgroans
18:07:43  <mmalecki>apr-util, however!
18:08:22  <bnoordhuis>mmalecki: doesn't contain ab, however
18:08:45  * bnoordhuiswgets the tarball
18:08:49  <mmalecki>bnoordhuis: siege works quite fine on smartos
18:09:11  <mmalecki>bnoordhuis: it's actually infinitely better than ab :)
18:09:37  <bnoordhuis>mmalecki: why?
18:09:51  <bnoordhuis>not that i'm defending ab, mind you
18:10:08  <mmalecki>bnoordhuis: it's not apache. also, it handles concurrency better, in my experience
18:11:44  * lohkeyjoined
18:15:34  * dapquit (Quit: Leaving.)
18:15:52  <indutny>mmalecki: they both are crap
18:16:16  <mmalecki>indutny: write something better :)
18:16:22  <indutny>mmalecki: will do :)
18:17:54  * piscisaureus_quit (Quit: ~ Trillian Astra - www.trillian.im ~)
18:19:59  * mikealquit (Quit: Leaving.)
18:24:40  <isaacs>bnoordhuis: i'm not sure
18:25:15  <isaacs>bnoordhuis: it seems like CLIENT_RENEG_LIMIT/CLIENT_RENEG_WINDOW doesn't work properly with cluster.
18:25:22  * isaacswriting a smaller test case now
18:25:42  <indutny>isaacs: as I understand - it should be placed in each worker
18:25:55  <indutny>isaacs: since every fork is just doing it's own accept() on server's fd
18:26:02  <indutny>isaacs: and all tls parsing stuff happens in workers
18:27:03  <isaacs>hm... ok
18:27:26  <isaacs>that makes sense. but even when i set tls.CLIENT_RENEG_LIMIT = 0 in workers and in the master, it still allows renegotiation
18:28:20  * piscisaureus_joined
18:28:45  <indutny>heh
18:28:47  <indutny>dunno
18:32:47  <mjr_>indutny: we'll be trying your external TLS session stuff soon.
18:33:17  <indutny>mjr_: probably you may want to wait for alternative patch first
18:33:25  <indutny>I need to try to make it work inside openssl
18:33:32  <mjr_>indutny: oh? You have a new and better way to do this?
18:33:42  <indutny>mjr_: yeah, working on that
18:33:51  <indutny>it was suggested by ryah yesterday
18:33:57  <mjr_>Hmm, well we were about to go live with it in a few hours. :)
18:34:05  <indutny>mjr_: haha
18:34:18  <indutny>mjr_: I suppose you've tested it in development before that, right?
18:34:26  <mjr_>oh yes
18:34:44  <indutny>mjr_: ok, anyway performance results would be really interesting to see
18:35:01  <indutny>mjr_: does mobile clients use server-side TLS sessions?
18:36:16  <mjr_>yeah, they do.
18:36:21  <indutny>cool
18:36:47  <indutny>hope this patch will be helpful for you guys
18:36:57  <indutny>and be ready for a better one ;)
18:36:57  * ibobrikjoined
18:38:41  <piscisaureus_>bnoordhuis: faio, what's that?
18:39:10  <tjfontaine>piscisaureus_: probably better to just expose a way to actually reload c-ares, and then others who want can set the watch or hook sighup
18:39:27  <indutny>piscisaureus_: secret project
18:39:38  <piscisaureus_>secret project on github?
18:39:39  <indutny>piscisaureus_: world domination by header file
18:39:41  <piscisaureus_>oh wait, I do that too
18:40:16  <piscisaureus_>tjfontaine: I need to expose this -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa814450%28v=vs.85%29.aspx :-)
18:40:43  <tjfontaine>piscisaureus_: I don't count that operating system you're largely responsible for maintaining :)
18:41:15  <piscisaureus_>luckily I am not maintaining the operating system
18:41:20  <piscisaureus_>or maybe, for the worse
18:41:45  <tjfontaine>heh, modifiers they dangle
18:41:54  * mikealjoined
18:42:33  <piscisaureus_>that api is not very well documented btw
18:42:46  <piscisaureus_>it should atleast mention that one has to perform an alertable wait :-9
18:43:24  <indutny>piscisaureus_: things are even worse for Core APIs on osx
18:43:29  <indutny>it's documented
18:43:36  <indutny>but documented wrong
18:43:40  <piscisaureus_>haha
18:43:40  <indutny>very often
18:43:59  <indutny>well, things are missing remarks there
18:44:00  <piscisaureus_>http://msdn.microsoft.com/en-us/library/windows/desktop/aa366329%28v=vs.85%29.aspx <-- much nicer, but doesn't do ipv6 :-(
18:44:01  * `3rdEdenquit (Quit: Linkinus - http://linkinus.com)
18:44:20  <indutny>like "yeah it works, but requires some tweaks that we ain't mentioning there"
18:44:32  * brsonquit (Read error: Operation timed out)
18:44:37  <piscisaureus_>atleast they make it open source
18:44:49  * brsonjoined
18:44:59  <indutny>nope
18:45:15  <indutny>Core* is not an opensource technology
18:45:26  <indutny>they've opensourced mach and bsd stuff
18:45:36  <indutny>and all utilities
18:46:12  * `3rdEdenjoined
18:46:50  <piscisaureus_>There should be a law that forces all operating systems to adopt kqueue.
18:47:12  <indutny>piscisaureus_: heh, what do I hear now
18:47:22  <indutny>piscisaureus_: you're a kqueue fan, or just trolling me?
18:47:34  <piscisaureus_>of course, how can one not be a kqueue fan
18:47:42  <indutny>ok, got it
18:49:33  * piscisaureus_booted indutny (See You - Kick sponsored by www.trillian.im)
18:49:42  <piscisaureus_>REVENGE HAHAHAHAHA
18:51:48  * indutnyjoined
18:51:55  * indutnybooted piscisaureus_ (piscisaureus_)
18:52:07  <indutny>:)
18:52:28  * piscisaureus_joined
18:52:36  <indutny>piscisaureus_: o hai!
18:52:46  <piscisaureus_>haiaaa
18:53:57  <indutny>piscisaureus_: actually, I think every os should implement io completion ports too
18:54:02  <indutny>piscisaureus_: and epoll
18:54:16  <indutny>so one can just choose least shittiest way for him to do things
18:54:22  <indutny>ah, forgot to say
18:54:28  <indutny>each implementation should have it's own bugs
18:54:30  <piscisaureus_>well, you sort of want an interface that works with everything
18:54:43  <indutny>this will make that OS perfect
18:54:45  <piscisaureus_>that's so nice a about kqueue
18:55:08  <piscisaureus_>it does io + processes + signals + fs changes
18:55:16  <indutny>and laundry
18:55:18  <piscisaureus_>it's fs support could be improved tho
19:00:19  * dapjoined
19:02:14  <indutny>piscisaureus_: btw, I really believe that kqueue is good for everything
19:02:37  <indutny>piscisaureus_: I use it when walking with my wife
19:02:49  <mjr_>kqueue lowers your cholesterol.
19:02:49  <piscisaureus_>indutny: what a weird coincidence
19:02:50  <indutny>piscisaureus_: and when feeding my cat
19:02:59  <piscisaureus_>indutny: I also use it when walking with your wife
19:03:06  <indutny>piscisaureus_: ahha!
19:03:07  <tjfontaine>I knew that joke wa scoming
19:03:13  <piscisaureus_>yeah
19:03:15  <indutny>you just used that joke
19:03:21  <piscisaureus_>I would have expected bnoordhuis to make it tho
19:03:27  <indutny>ircretary: remind me to slap piscisaureus_ face once I'll see him on lxjs
19:03:27  <ircretary>indutny: I'm not sure what to do with that command. Ask for help in PM.
19:03:50  <indutny>ircretary: and your face too
19:03:50  <ircretary>indutny: I'm not sure what to do with that command. Ask for help in PM.
19:03:58  <indutny>ircretary: go away
19:04:09  <indutny>worked?
19:08:52  * brson_joined
19:08:56  * brsonquit (Read error: Connection reset by peer)
19:09:12  <isaacs>indutny: no, she just tries not to be repetitive.
19:09:22  <ircretary>indutny: I'm still here.
19:09:29  <isaacs>see?
19:11:24  <indutny>ircretary: how intelligent
19:11:25  <ircretary>indutny: I'm not sure what to do with that command. Ask for help in PM.
19:11:45  <indutny>ircretary: kill all humans
19:11:46  <ircretary>indutny: I'm not sure what to do with that command. Ask for help in PM.
19:13:06  * hzquit (Disconnected by services)
19:13:15  * hzjoined
19:15:31  * indexzerojoined
19:15:37  * indexzeroquit (Client Quit)
19:15:58  * indexzerojoined
19:16:10  * loladirojoined
19:16:35  <isaacs>ircretary: bomb indutny
19:16:36  <ircretary>isaacs: Arming the charges...
19:16:49  <ircretary>KILL ALL THE HUMANS.
19:23:18  <isaacs>bnoordhuis: so, this is interesting...
19:23:27  <isaacs>bnoordhuis: the reneg attack protection works for tls servers.
19:23:42  <isaacs>but for an HTTPS server, it's letting me renegotiate all day long
19:23:45  <isaacs>as many times as i want
19:25:02  <piscisaureus_>hmm
19:25:16  <piscisaureus_>we should document that 'close' also receives the exitCode and exitSignal as arguments
19:26:49  * mikealquit (Quit: Leaving.)
19:30:33  * stagas_joined
19:31:54  * stagasquit (Ping timeout: 246 seconds)
19:31:58  * stagas_changed nick to stagas
19:34:41  * mikealjoined
19:34:58  * hzquit
19:42:33  * loladiroquit (Quit: loladiro)
19:57:06  * loladirojoined
20:04:27  * philips_quit (Excess Flood)
20:04:49  * philips_joined
20:08:31  * tomshredsjoined
20:08:47  <ryah>indutny: if do the openssl patch - mad respect
20:09:09  <ryah>also - it's the only way it should be done - the current hack is horrible
20:09:10  <ryah>:)
20:09:37  * ibobrikquit (Quit: ibobrik)
20:10:52  * indexzeroquit (Quit: indexzero)
20:10:59  * philips_quit (Excess Flood)
20:12:19  * philips_joined
20:12:25  <TooTallNate>creationix: what is require "web"?
20:13:31  * John-Greshamjoined
20:13:36  <John-Gresham>hi, I'
20:14:46  <John-Gresham>come from #joyent, I'm trying to get libuv compiled under FreeBSD but I'm thrown with three errors like "src/unix/kqueue.c:40: error: 'uv__io_t' has no member named 'cb'"
20:14:57  <John-Gresham>does anyone know something about it ?
20:16:02  <TooTallNate>isaacs: lol @ read-package-json
20:16:07  <TooTallNate>softabstop: 16
20:22:08  * chobi_e_quit (Ping timeout: 256 seconds)
20:24:10  * mikealquit (Quit: Leaving.)
20:24:27  <bnoordhuis>isaacs: interesting. can't think of a plausible reason why it doesn't work
20:24:33  <bnoordhuis>John-Gresham: i probably broke it
20:25:54  <bnoordhuis>John-Gresham: at what commit are you?
20:27:15  * chobi_e_joined
20:27:34  <John-Gresham>bnoordhuis: 09faee40eb6de13f115dfcae3305faa49f8d252f
20:29:09  <bnoordhuis>John-Gresham: can you try https://github.com/bnoordhuis/libuv/commit/a75e105 ?
20:29:55  <bnoordhuis>John-Gresham: append .patch to the url to get the raw patch file
20:31:20  <John-Gresham>bnoordhuis: ok, just a few minutes
20:32:50  * TooTallNatequit (Ping timeout: 264 seconds)
20:35:40  * TooTallNatejoined
20:38:40  <John-Gresham>bnoordhuis: DAMN YOU !
20:38:45  <John-Gresham>bnoordhuis: it works :)
20:38:55  <bnoordhuis>John-Gresham: good :)
20:38:59  <bnoordhuis>thanks for reporting it
20:39:16  <CIA-131>libuv: Ben Noordhuis master * ra75e105 / include/uv-private/uv-bsd.h : freebsd: fix build breakage introduced in 3b69c0f - http://git.io/iDymRQ
20:39:26  <John-Gresham>bnoordhuis: thanks for paying attention to users :)
20:39:39  <tjfontaine>fsbd has users?
20:39:52  <John-Gresham>tjfontaine: don't know ;)
20:39:59  <bnoordhuis>at least three. i've met them
20:40:02  <John-Gresham>but FreeBSD sure as :)
20:40:55  * travis-cijoined
20:40:56  <travis-ci>[travis-ci] joyent/libuv#635 (master - a75e105 : Ben Noordhuis): The build passed.
20:40:56  <travis-ci>[travis-ci] Change view : https://github.com/joyent/libuv/compare/09faee40eb6d...a75e10504f4e
20:40:56  <travis-ci>[travis-ci] Build details : http://travis-ci.org/joyent/libuv/builds/2277044
20:40:56  * travis-cipart
20:41:17  <tjfontaine>:)
20:43:07  <John-Gresham>aaah, great, thank you very much bnoordhuis
20:43:15  <John-Gresham>THAT was fast :)
20:43:23  <bnoordhuis>we aim to please
20:44:28  <John-Gresham>well you pleased two frenchies tonight, thanks again :)
20:54:21  * dshaw_joined
20:59:46  <CIA-131>node: Ben Noordhuis master * r8bec261 / (3 files in 2 dirs): tls, https: throw exception on missing key/cert - http://git.io/K0mVTw
21:09:11  <creationix>TooTallNate, that's a new module I wrote last night
21:09:23  <creationix>bypasses all the node compat library in the 'http' module
21:14:44  * indexzerojoined
21:14:50  * indexzeroquit (Client Quit)
21:23:50  <piscisaureus_>herfststorm
21:24:07  <piscisaureus_>^-- awesome word innit?
21:24:47  * John-Greshamquit (Quit: Lost terminal)
21:26:51  * tomshredsquit (Quit: Leaving...)
21:26:53  * tommybergeronquit (Quit: Leaving...)
21:30:16  <mmalecki>piscisaureus_: what does it mean?
21:45:50  <isaacs>TooTallNate: yeah, i love working with that module
21:51:07  * rendarquit
21:51:26  <isaacs>creationix: re luvit modules, and learning from the mistakes of your ancestors...
21:51:51  <isaacs>creationix: a much simpler approach would be for .node (or .luv or whatever) compiled addons to be loaded from a directory at startup time.
21:52:10  <creationix>addons vs modules
21:52:13  <isaacs>creationix: and then the actual program is all .js (or .lua or whatever) modules.
21:52:14  <isaacs>period
21:52:18  <isaacs>none of this require.extensions bullshit
21:52:33  <isaacs>you must handle recursive dependencies.
21:52:36  <isaacs>there's no way out of that
21:52:46  <creationix>so if you wanted to use a module that required some binary addon, you would have to manually add that addon to node?
21:52:51  <isaacs>creationix: yes.
21:53:03  <creationix>not a bad idea
21:53:12  <isaacs>creationix: then packages could declare that they have a specific addon, and npm could install it into the magic folder or whatever.
21:53:13  <creationix>process.binding('msgpack')
21:53:16  <isaacs>i mean, there's ways to make it wokr
21:53:29  <isaacs>but the addon would be on process.binding(), not loaded via require()
21:53:52  <creationix>I think it's sane
21:54:01  <creationix>I could even lazy load the bindings the first time they were mentioned
21:54:07  <creationix>as a blocking dlopen
21:54:08  <isaacs>yeah
21:54:12  <isaacs>but that doesn't matter
21:54:17  <isaacs>you may as well just load them at startup
21:54:21  <isaacs>don't need them? don't install them.
21:54:31  <creationix>but they would be installed globally right?
21:54:34  <isaacs>if you put them in ./addons or whatever the folder is, they get loaded.
21:54:40  <creationix>oh, local install
21:54:41  <isaacs>sure.
21:55:04  <creationix>I'm not sure what a local install buys over the current system
21:55:16  <isaacs>maybe they'd be global, and actually have to be compiled and dropped into a specific global folder.
21:55:19  <isaacs>php-style
21:55:47  <creationix>I guess you would then get into dependency hell when you need conflicting versions of an addon
21:55:55  <creationix>but I think that's ok
21:55:58  <isaacs>or even compiled into the node binary, like ./configure --addons=my,list,of,addons
21:56:17  <creationix>too bad you can't staticly link in .so files
21:56:33  <creationix>or can you...
21:56:39  <creationix>I'll bet ld can convert them
21:56:48  <isaacs>but whatever the mechanism, binary addons and javascript modules should be separate; the javascript module system should be for javascript, period.
21:56:58  <isaacs>s/javascript/lua/g when regarding luvit, of course.
21:57:13  <isaacs>the walk-up-node_modules-folder thing is good.
21:57:17  <creationix>so coffeescript has to be pre-compiled then?
21:57:21  <isaacs>the arbitrary-optional-extensions thing is bad.
21:57:24  <isaacs>yeah
21:57:34  <isaacs>i mean, you can write your javascript however you want.
21:57:53  <isaacs>you can use coffeescript, or you can roll dice, or you can hire somebody else to write it for you.
21:57:56  <isaacs>but node should run js, period.
21:58:17  <isaacs>it's too late to change it in node.
21:58:27  <creationix>so if I require /foo/bar, it will look for /foo/bar.lua and /foo/bar/index.lua and nothing more
21:58:47  <creationix>or look in /foo/bar/package.lua
21:58:50  <isaacs>no
21:58:51  <creationix>and look for main
21:59:00  <isaacs>if you require/foo/bar, it'll check if /foo/bar is a folder or a file
21:59:04  <isaacs>if it's a file, load it as lua
21:59:08  <isaacs>if it's a dir, load it as a package
21:59:19  <isaacs>package = package.lua:main field, or index.lua, period
21:59:26  <isaacs>none of this auto-extension crap
21:59:43  <creationix>so then all my requires will have to be /foo/bar.lua
21:59:49  <creationix>if I want to require a lua script directly
21:59:50  <isaacs>that was pushed by commonjs so that modules could be database entries or urls or mappings to arbitrary things, etc.
21:59:57  <creationix>or /foo/bar if I want the bar package
21:59:59  <isaacs>creationix: yes.
22:00:02  <isaacs>creationix: yes.
22:00:07  <isaacs>that's how it should've been all along in node.
22:00:31  <isaacs>inferring the extension adds a lot of extra stats and complexity.
22:00:41  <isaacs>most of which is never used, but take it away now, and people will get upset.
22:01:08  <creationix>so fs.open and then try to read as a file, if I get EISDIR, then try to load package.lua
22:01:12  <creationix>don't even need a single stat
22:01:17  <isaacs>right
22:01:24  <isaacs>and if package.lua is ENOENT, then try index.lua
22:01:28  <isaacs>and if that's ENOENT, then fail
22:01:36  <creationix>simple enough
22:01:53  <isaacs>you *do* need to cache module objects, though, so that you can handle cycles.
22:01:58  <creationix>and all the binary addons can be loaded through process.binding
22:02:12  <creationix>luvit doesn't support cycles
22:02:20  <creationix>since the module format is to return the exports
22:02:23  <isaacs>and having absolute modules (ie, that don't start with . or /) walk up the tree, has proven extremely powerful
22:02:29  <creationix>yes, I have that
22:02:31  <isaacs>creationix: yes, that's what i'm saying. that's a mistake.
22:02:37  <isaacs>creationix: you need to support cycles.
22:02:39  <creationix>except it's modules instead of node_modules
22:02:42  <isaacs>creationix: it's a huge pain if you don't.
22:02:52  <isaacs>creationix: at least, it will be eventually.
22:02:57  <isaacs>it isn't now because you don't uave users.
22:03:19  <creationix>I could easily add module.exports support to the module format if it's a problem
22:03:30  <creationix>but most other lua systems are going towards returning the exports
22:03:55  <isaacs>creationix: what will happen is that people will invent clever ways to work around the fact that you don't create cycles, which will depend on stupid implementation details, and will lock you into bad decisions forever.
22:04:08  <isaacs>creationix: the sooner you provide some good "blessed" way to do that, the better.
22:04:42  <creationix>how about return for non-cycles and exports.foo = bar for cycles?
22:05:04  <isaacs>creationix: you could just have it check the regurl value, and set module.exports = retval if it's not undefined
22:05:05  <creationix>dunno, then there are two systems, what if the user puts stuff on both
22:05:11  <isaacs>or nil or whatever lua has
22:05:20  <isaacs>exports.foo = bar ===> dumb.
22:05:27  <isaacs>module.exports = foo ===> awesome.
22:05:39  <isaacs>exports = foo ===> best api, but implementation sucks.
22:05:48  <creationix>but module.exports =foo prevents supporting cycles
22:05:50  <isaacs>only way to do it is with some kind of magic setter, and that's lame.
22:06:10  <isaacs>creationix: unless you set it to a function, and rely on hoisting
22:06:17  <isaacs>but yeah, having all three is probably best.
22:06:36  <isaacs>creationix: you just have to set module.exports before loading any other module.
22:06:50  <creationix>I still think supporting cycles is overrated, but enough smart people tell me otherwise
22:07:12  <isaacs>creationix: i would have agreed with you a few years ago.
22:07:17  <isaacs>working with yui3 and jquery convinced me.
22:07:39  <isaacs>the hoops you end up having to jump through to NOT support cycles are not pleasant.
22:07:49  <isaacs>you end up constructing bigger apps and having to think harder about them.
22:08:10  <isaacs>because you get bitten in weird places when a cycle arises, and it's often not in code of yours
22:08:12  <creationix>you basically implement cycle support at the app level
22:08:27  <isaacs>right, but it doesn't work that way
22:08:37  <isaacs>and now instead of building a website i'm dicking around with the module system.
22:08:40  <isaacs>no one wants that!
22:08:41  <isaacs>;)
22:08:56  * tomshredsjoined
22:08:59  * tommybergeronjoined
22:09:07  <isaacs>or i'm copying the foo module to my-foo and modifying it to not require bar and then require the real foo later once bar is loaded.
22:09:10  <isaacs>etc.
22:09:56  <isaacs>as a result the trees also tend to be bigger and broader than necessary.
22:10:28  <creationix>yeah, I can see that being a problem
22:10:45  <creationix>commonjs cycle support has edge cases too
22:10:49  <creationix>but I guess they aren't as bad
22:10:52  <isaacs>cycles are less important in class heirarchies (which tend towards big ugly trees anyway, though they are very organized and noncyclical) and more for smaller functional programs, since the little utilities might use a lot of overlapping bits.
22:10:57  <isaacs>yeah, they're pretty bad.
22:11:09  <isaacs>but like i said, function hoisting really does solve most of the problems most of the way.
22:11:22  <creationix>lua doesn't have function hoisting :)
22:11:22  <isaacs>it'd be nice if we made module.exports a setter that could only be set once.
22:11:25  <creationix>*:(
22:11:30  <isaacs>d'oh
22:11:44  <isaacs>well... set module.exports = function () ... before you call require()
22:11:47  * CoverSlidequit (Ping timeout: 252 seconds)
22:11:49  <creationix>it does have crazy proxy-like support baked in though
22:12:55  <creationix>speaking of learning from node. I've decided I don't like node's http interface
22:13:05  <creationix>and I really don't like connect style middleware
22:13:21  <creationix>and we've already discussed the issues with readable streams
22:13:38  * tommybergeronquit (Ping timeout: 264 seconds)
22:13:38  * tomshredsquit (Ping timeout: 264 seconds)
22:13:46  <isaacs>bnoordhuis: how do you feel about that https pummel test? is it valid?
22:14:15  <creationix>I'm starting to think that cloning the node API is a loosing game. Not many people want/need that in lua anyway. Time to innovate instead :)
22:14:31  <bnoordhuis>isaacs: what pummel test?
22:14:40  <isaacs>https://github.com/isaacs/node/commit/dec16aa5c2e21de1d0db737f2a08872993c1b2dd
22:14:53  <isaacs>bnoordhuis: basically took the tls-ci-reneg test and made it https
22:16:31  <bnoordhuis>isaacs: i guess it looks okay to me
22:16:40  <bnoordhuis>lots of code duplication obviously
22:16:51  <isaacs>of course
22:16:53  <isaacs>but tests do that
22:17:14  <isaacs>i could be clever and have the tls-reneg test call itself with --use-https or something
22:17:19  <isaacs>but meh.
22:18:00  <CIA-131>node: Ben Noordhuis master * r4784ea1 / (8 files): deps: upgrade http_parser to ad3b631 - http://git.io/mL90cQ
22:19:09  <bnoordhuis>isaacs: don't worry, i don't care too much
22:20:31  <bnoordhuis>4784ea1 makes http in node infinitesimally slower
22:20:37  <bnoordhuis>but more correct
22:20:50  <bnoordhuis>choices, choices
22:23:35  <isaacs>bnoordhuis: it'll just make it easier to beat with the js parser, if we ever get around to doing that :)
22:23:54  <isaacs>creationix: you still interested in that, or has it gone to the creationix code orphanage?
22:24:15  <creationix>I'm afraid I don't have time
22:24:39  <isaacs>kk, no worries :)
22:24:54  <creationix>I've been so much busier since the 3rd kid arrived
22:24:55  <CIA-131>node: isaacs v0.8 * rdec16aa / test/pummel/test-https-ci-reneg-attack.js : Test client renegotiation attacks on HTTPS - http://git.io/cTXz4w
22:25:10  <isaacs>creationix: i can imagine
22:25:27  <isaacs>creationix: but i'm sure that the imaginary kids are way easier to take care of
22:25:32  <isaacs>than your real ones.
22:26:48  <bnoordhuis>piscisaureus_: i think the herfststorm has arrived here
22:28:05  <CIA-131>node: Ankur Oberoi v0.8 * ra57d315 / doc/api/http.markdown : doc: fix grammar errors - http://git.io/vZyj5A
22:30:17  <TooTallNate>bnoordhuis: you thinking v0.8 or master for the "sunos" change?
22:30:25  <TooTallNate>v0.8 is probably fine
22:34:16  * TheJHquit (Ping timeout: 244 seconds)
22:34:56  * philips_quit (Excess Flood)
22:35:08  <bnoordhuis>TooTallNate: well... no one's really complaining
22:35:15  <bnoordhuis>so i'd merge it in master
22:35:30  <TooTallNate>fair enough
22:37:00  <bnoordhuis>isaacs: my 8 core linux desktop beats your 32 core smartos machine by a considerable margin :)
22:37:19  <bnoordhuis>that's with a epoll vs event ports benchmark
22:38:19  * philips_joined
22:39:57  <isaacs>bnoordhuis: ahha!
22:40:12  <isaacs>bnoordhuis: the issue is that http swallows socket errors and calls them clientError events instead
22:40:24  <isaacs>so the beasts get in
22:40:31  <isaacs>it is very hard to make a properly secure https server in node.
22:40:33  <isaacs>this is not good.
22:41:15  <bnoordhuis>performance is also wildy erratic on smartos... maybe because it's a virtual machine
22:41:29  <isaacs>what smartos are you using?
22:41:33  <isaacs>the build drone?
22:41:35  <bnoordhuis>whatever is on umcats
22:41:40  <isaacs>umcats is not 32 core
22:41:43  <isaacs>umcats is puny
22:41:55  <isaacs>it pretends to be more, because in theory it can burst.
22:42:11  <isaacs>you want
22:42:13  <isaacs>that's the build drone
22:42:16  <bnoordhuis>that would explain it
22:42:18  <isaacs>log in as root and have your way with it
22:42:20  <bnoordhuis>let me try that machine
22:42:56  <isaacs>the limiting factor there is probably that umcats only has 1gb of ram
22:42:59  <isaacs>or maybe less
22:43:12  <isaacs>and one virtual cpu
22:44:52  <CIA-131>node: Nathan Rajlich master * r606a933 / node.gyp : build: set `process.platform` to "sunos" on SunOS - http://git.io/gpFDuw
22:59:24  <bnoordhuis># for i in 1 2 3; do ab -k -q -c 1000 -n 250000 | grep Requests; done
22:59:24  <bnoordhuis>Requests per second: 77618.66 [#/sec] (mean)
22:59:24  <bnoordhuis>Requests per second: 76314.98 [#/sec] (mean)
22:59:24  <bnoordhuis>Requests per second: 91749.99 [#/sec] (mean)
22:59:31  <bnoordhuis>^ wildly erratice once again :)
22:59:38  <bnoordhuis>i even saw it go to 110K reqs/s
22:59:46  <isaacs>bnoordhuis: interesting
22:59:48  <bnoordhuis>*erratic
23:00:05  <isaacs>so, to actually protect against ci reneg attacks in an https, server, you have to do this:
23:00:08  <isaacs> server.on('secureConnection', function (conn) {
23:00:10  <isaacs> conn.on('error', function (err) {
23:00:13  <isaacs> console.error('Caught exception: ' + err);
23:00:15  <isaacs> assert(/TLS session renegotiation attack/.test(err));
23:00:18  <isaacs> conn.destroy();
23:00:20  <isaacs> seenError = true;
23:00:23  <isaacs> });
23:00:25  <isaacs> });
23:00:26  <isaacs>because the 'request' event never fires.
23:00:44  <bnoordhuis>we need to fix that
23:01:10  <isaacs>yeah
23:01:19  <isaacs>here's what i'm thinking:
23:01:22  <TooTallNate>bnoordhuis: lulz https://github.com/joyent/node/issues/3944#issuecomment-8144171
23:01:40  <bnoordhuis>TooTallNate: hah
23:01:44  <isaacs>if the socket emits error, we need to .destroy() it.
23:01:45  <bnoordhuis>ask him what he needs it for
23:02:38  <isaacs>i'd call reporting it as 'solaris' a bug.
23:02:44  <bnoordhuis>isaacs: maybe re-emit the error event on the https server object?
23:02:53  <isaacs>bnoordhuis: well, you don't want to crash the server.
23:03:00  <isaacs>bnoordhuis: you just want to shut down that connection
23:03:05  <bnoordhuis>true
23:03:19  <isaacs>bnoordhuis: it should be treated similarly to if you connected and wrote 'HTTP 1.1/GETAHFI*AHO$EIHAW*OHIASEOIBCZOSHEIF*ZSBEOFIUAW#BD'
23:03:47  <isaacs>bnoordhuis: like, "this client sent some garbage and did the worng thing. i'm not going to bother you with it."
23:03:55  <bnoordhuis>okay, so kill it with fire when 'request' hasn't been emitted yet, otherwise emit it as an error on the request object?
23:04:00  <isaacs>yes.
23:04:31  <isaacs>also: all the places where we emit clientError, we really need to pass the socket AND the error
23:04:46  <isaacs>the server has many sockets happening at once.
23:04:50  * loladiroquit (Quit: loladiro)
23:04:52  <isaacs>just knowing "someone had an error" is not so great.
23:05:22  * c4miloquit (Remote host closed the connection)
23:05:24  <bnoordhuis>i've always felt that clientError was something of an odd duck
23:05:32  <isaacs>yeah, maybe it needs to just go away.
23:05:33  <bnoordhuis>why was it added in the first place?
23:05:36  <bnoordhuis>yes
23:05:39  <isaacs>because there was an http client.
23:05:45  <isaacs>remember http.Client?
23:05:47  <bnoordhuis>i do
23:05:51  <isaacs>then you'd use that to create a request
23:06:04  <isaacs>but if the client had an error, the request would have a clientError
23:06:36  <bnoordhuis>okay. but it's been gone a long time now
23:07:07  <bnoordhuis>so we can ditch clientError too now, i think?
23:09:01  <isaacs>i just asked the list to see if anyone's using it.
23:09:06  <isaacs>it's easy to keep around.
23:09:13  <isaacs>but we can deprecate it, probably
23:09:34  <isaacs>if we're not going to deprecate it, passing the socket would make it at least useful.
23:14:05  <CIA-131>node: Nathan Rajlich v0.8 * r355c148 / node.gyp : build: set `process.platform` to "sunos" on SunOS - http://git.io/NGc4fg
23:18:23  <isaacs>TooTallNate: thanks :)
23:22:27  * `3rdEdenquit (Quit: gnite!)
23:28:49  * perezdquit (Quit: perezd)
23:51:21  <piscisaureus_>isaacs: bnoordhuis: why do fork()'ed child processes not emit close?
23:52:05  <piscisaureus_>any reason beyond that's just the way it is?
23:54:05  * loladirojoined
23:54:14  <piscisaureus_>hmm, this looks like an ordinary bug to me