From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS8100 96.47.226.0/23 X-Spam-Status: No, score=-1.5 required=3.0 tests=AWL,BAYES_00,RCVD_IN_XBL shortcircuit=no autolearn=no version=3.3.2 X-Original-To: spew@80x24.org Received: from 80x24.org (bolobolo1.torservers.net [96.47.226.20]) by dcvr.yhbt.net (Postfix) with ESMTP id 6EC771FA7B for ; Tue, 12 May 2015 00:23:47 +0000 (UTC) From: Eric Wong To: spew@80x24.org Subject: [PATCH] ext/socket/init.c (rsock_s_recvfrom_nonblock): avoid redundant fcntl Date: Tue, 12 May 2015 00:23:45 +0000 Message-Id: <1431390225-2406-1-git-send-email-e@80x24.org> List-Id: MSG_DONTWAIT is enough to force non-blocking I/O under Linux, so avoid changing the state of a socket. This will allow certain threads to do a non-destructive non-blocking "peek" while others block. --- ext/socket/init.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/socket/init.c b/ext/socket/init.c index 0bafec4..ac39d85 100644 --- a/ext/socket/init.c +++ b/ext/socket/init.c @@ -211,7 +211,11 @@ rsock_s_recvfrom_nonblock(VALUE sock, int argc, VALUE *argv, enum sock_recv_type str = rb_tainted_str_new(0, buflen); rb_io_check_closed(fptr); + +#ifndef MSG_DONTWAIT rb_io_set_nonblock(fptr); +#endif + len0 = alen; slen = recvfrom(fd, RSTRING_PTR(str), buflen, flags, &buf.addr, &alen); if (slen != -1 && len0 < alen) -- EW