From owner-freebsd-bugs Mon Sep 2 20:40:20 2002 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 8A80937B401 for ; Mon, 2 Sep 2002 20:40:04 -0700 (PDT) Received: from freefall.freebsd.org (freefall.FreeBSD.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6BD5143E7B for ; Mon, 2 Sep 2002 20:40:03 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.4/8.12.4) with ESMTP id g833e3JU005107 for ; Mon, 2 Sep 2002 20:40:03 -0700 (PDT) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.4/8.12.4/Submit) id g833e3TH005106; Mon, 2 Sep 2002 20:40:03 -0700 (PDT) Received: from mx1.FreeBSD.org (mx1.FreeBSD.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 2608D37B400 for ; Mon, 2 Sep 2002 20:37:27 -0700 (PDT) Received: from soapbox.yandex.ru (soapbox.yandex.ru [213.180.193.40]) by mx1.FreeBSD.org (Postfix) with ESMTP id D80C543E6A for ; Mon, 2 Sep 2002 20:37:25 -0700 (PDT) (envelope-from vfom@narod.ru) Received: from YAMAIL (soapbox.yandex.ru) by mail.yandex.ru id ; Tue, 3 Sep 2002 07:37:17 +0400 Message-Id: <3D742E6D.00000A.02440@soapbox.yandex.ru> Date: Tue, 3 Sep 2002 07:37:17 +0400 (MSD) From: "vfom" Reply-To: vfom@narod.ru To: FreeBSD-gnats-submit@FreeBSD.org Subject: kern/42352: Impossible to set RCV timeout on a socket to 33 sec, with "option HZ=1000" in ke Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org >Number: 42352 >Category: kern >Synopsis: Impossible to set RCV timeout on a socket to 33 sec, with "option HZ=1000" in kernel >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Sep 02 20:40:01 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Viktor Fomichev >Release: FreeBSD 4.6.2-RELEASE i386 >Organization: home-user >Environment: System: FreeBSD shark.office.sice.ru 4.6.2-RELEASE FreeBSD 4.6.2-RELEASE #0: Wed Aug 28 12:20:43 NOVST 2002 root@gog:/usr/src/sys/compile/GROM.ipsec.tap i386 >Description: Impossible to set receive and send timeout on a socket to more then 33 secs. when kernel compiled with "option HZ=1000" It recomended for network device polling. (man 4 polling) "Setsockopt" returns with error: Numerical argument out of domain. >How-To-Repeat: Compile new kernel with "option HZ=1000". Install new kernel and reboot. Compile and run following program. Output looks like: # ./test_sockopt recv 32... test_sockopt: recv: Resource temporarily unavailable test_sockopt: setsockopt: Numerical argument out of domain # test_sockopt.c: # include # include # include # include # include # include # include # include int main(int argc, char *argv[]) { int s; struct timeval tv; struct sockaddr_in sin; u_char buf[1000]; if ((s = socket(PF_INET, SOCK_DGRAM, 0)) == -1) err(1, "socket"); sin.sin_len = sizeof(sin); sin.sin_family = AF_INET; sin.sin_port = htons(10000); sin.sin_addr.s_addr = INADDR_ANY; if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) == -1) err(1, "bind"); tv.tv_sec = 32; tv.tv_usec = 0; if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) == -1) err(1, "setsockopt"); printf("recv 32...\n"); if (recv(s, buf, sizeof(buf), 0) == -1) warn("recv"); tv.tv_sec = 33; tv.tv_usec = 0; if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) == -1) err(1, "setsockopt"); printf("recv 33...\n"); if (recv(s, buf, sizeof(buf), 0) == -1) warn("recv"); return (0); } >Fix: Not known. It seems to me, we have to change "socket" structure definition in "sys/socketvar.h", in substructure "sockbuf" - sb_timeo must be at least 4 byte integer, or long - to forget the problem forever. >Release-Note: >Audit-Trail: >Unformatted: X-send-pr-version: 3.113 X-GNATS-Notify: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message