From owner-freebsd-hackers@freebsd.org Fri Jul 5 06:28:29 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7D3EC15E64BE for ; Fri, 5 Jul 2019 06:28:29 +0000 (UTC) (envelope-from wojtek@puchar.net) Received: from puchar.net (puchar.net [194.1.144.90]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4D36B87EBF for ; Fri, 5 Jul 2019 06:28:28 +0000 (UTC) (envelope-from wojtek@puchar.net) Received: Received: from 127.0.0.1 (localhost [127.0.0.1]) by puchar.net (8.15.2/8.15.2) with ESMTPS id x656SKt6012487 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Fri, 5 Jul 2019 08:28:20 +0200 (CEST) (envelope-from puchar-wojtek@puchar.net) Received: from localhost (puchar-wojtek@localhost) by puchar.net (8.15.2/8.15.2/Submit) with ESMTP id x656SKPE012484 for ; Fri, 5 Jul 2019 08:28:20 +0200 (CEST) (envelope-from puchar-wojtek@puchar.net) Date: Fri, 5 Jul 2019 08:28:20 +0200 (CEST) From: Wojciech Puchar To: freebsd-hackers@freebsd.org Subject: quite simple network question Message-ID: User-Agent: Alpine 2.20 (BSF 67 2015-01-07) MIME-Version: 1.0 X-Rspamd-Queue-Id: 4D36B87EBF X-Spamd-Bar: ----- Authentication-Results: mx1.freebsd.org; spf=pass (mx1.freebsd.org: domain of wojtek@puchar.net designates 194.1.144.90 as permitted sender) smtp.mailfrom=wojtek@puchar.net X-Spamd-Result: default: False [-5.70 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; FROM_HAS_DN(0.00)[]; R_SPF_ALLOW(-0.20)[+mx]; TO_MATCH_ENVRCPT_ALL(0.00)[]; MIME_GOOD(-0.10)[multipart/mixed,text/plain]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_DN_NONE(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; RCVD_COUNT_THREE(0.00)[3]; RCVD_TLS_LAST(0.00)[]; MX_GOOD(-0.01)[puchar.net]; CTYPE_MIXED_BOGUS(1.00)[]; RCVD_IN_DNSWL_NONE(0.00)[90.144.1.194.list.dnswl.org : 127.0.10.0]; NEURAL_HAM_SHORT(-0.93)[-0.927,0]; IP_SCORE(-3.47)[ip: (-9.16), ipnet: 194.1.144.0/24(-4.58), asn: 43476(-3.66), country: PL(0.06)]; DMARC_NA(0.00)[puchar.net]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+]; ASN(0.00)[asn:43476, ipnet:194.1.144.0/24, country:PL]; MID_RHS_MATCH_FROM(0.00)[] Content-Type: text/plain; format=flowed; charset=ISO-8859-2 Content-Transfer-Encoding: 8BIT X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jul 2019 06:28:29 -0000 i wrote a program with client and server part - running under FreeBSD. Client program use socket, then connect to establish TCP connection to server. then it uses select every now and then to check if anything came from server, when select returns nonzero recv is executed. If recv returns negative or zero - connection error is assumed, close is called and disconnect reported to user. This works almost properly: a) reception works fine b) when server disconnects it's detected and reported. But if network fails (for simulating i simply turn ethernet interface off) it doesn't see it for a long time. so between socket and connect i added a=1; setsockopt(serverconnfd,SOL_SOCKET,SO_KEEPALIVE,&a,sizeof(a)); a=5; //KEEPALIVE co 5 sekund setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPIDLE,&a,sizeof(a)); setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPINTVL,&a,sizeof(a)); a=2; //2 próby nim uzna że rozłączony setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPCNT,&a,sizeof(a)); and i assumed it will keepalive every 5 seconds and after 2 failures behave as disconnect. But even after minute of waiting i don't get disconnect. What i am doing wrong? From owner-freebsd-hackers@freebsd.org Fri Jul 5 06:39:58 2019 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CED6715E6987 for ; Fri, 5 Jul 2019 06:39:58 +0000 (UTC) (envelope-from bakul@bitblocks.com) Received: from mail.bitblocks.com (ns1.bitblocks.com [173.228.5.8]) by mx1.freebsd.org (Postfix) with ESMTP id B60D3885A3 for ; Fri, 5 Jul 2019 06:39:57 +0000 (UTC) (envelope-from bakul@bitblocks.com) Received: from bitblocks.com (localhost [127.0.0.1]) by mail.bitblocks.com (Postfix) with ESMTP id 74E3E156E424; Thu, 4 Jul 2019 23:39:36 -0700 (PDT) To: Wojciech Puchar cc: freebsd-hackers@freebsd.org Subject: Re: quite simple network question In-reply-to: Your message of "Fri, 05 Jul 2019 08:28:20 +0200." References: Comments: In-reply-to Wojciech Puchar message dated "Fri, 05 Jul 2019 08:28:20 +0200." From: Bakul Shah MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <22596.1562308776.1@bitblocks.com> Date: Thu, 04 Jul 2019 23:39:36 -0700 Message-Id: <20190705063943.74E3E156E424@mail.bitblocks.com> X-Rspamd-Queue-Id: B60D3885A3 X-Spamd-Bar: ----- Authentication-Results: mx1.freebsd.org; spf=pass (mx1.freebsd.org: domain of bakul@bitblocks.com designates 173.228.5.8 as permitted sender) smtp.mailfrom=bakul@bitblocks.com X-Spamd-Result: default: False [-5.19 / 15.00]; ARC_NA(0.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000,0]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip4:173.228.5.8/29]; NEURAL_HAM_LONG(-1.00)[-1.000,0]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[bitblocks.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MX_GOOD(-0.01)[mail.bitblocks.com]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_HAM_SHORT(-0.88)[-0.881,0]; IP_SCORE(-2.10)[ip: (-6.44), ipnet: 173.228.0.0/20(-3.22), asn: 46375(-0.79), country: US(-0.06)]; RCVD_NO_TLS_LAST(0.10)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:46375, ipnet:173.228.0.0/20, country:US]; RCVD_COUNT_TWO(0.00)[2] X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jul 2019 06:39:59 -0000 On Fri, 05 Jul 2019 08:28:20 +0200 Wojciech Puchar wrote: > i wrote a program with client and server part - running under FreeBSD. > > Client program use socket, then connect to establish TCP connection to = > > server. > > then it uses select every now and then to check if anything came from = > > server, when select returns nonzero recv is executed. > > If recv returns negative or zero - connection error is assumed, close is = > > called and disconnect reported to user. > > > This works almost properly: > > a) reception works fine > b) when server disconnects it's detected and reported. > > > But if network fails (for simulating i simply turn ethernet interface off) > it doesn't see it for a long time. > > so between socket and connect i added > > a=3D1; > setsockopt(serverconnfd,SOL_SOCKET,SO_KEEPALIVE,&a,sizeof(a)); > a=3D5; //KEEPALIVE co 5 sekund > setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPIDLE,&a,sizeof(a)); > setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPINTVL,&a,sizeof(a)); > a=3D2; //2 pr=F3by nim uzna =BFe roz=B3=B1czony > setsockopt(serverconnfd,SOL_SOCKET,TCP_KEEPCNT,&a,sizeof(a)); > > and i assumed it will keepalive every 5 seconds and after 2 failures = > > behave as disconnect. > > But even after minute of waiting i don't get disconnect. > > What i am doing wrong? I believe you have to set the exceptfds argument to select() properly.