From owner-freebsd-net@FreeBSD.ORG Tue Sep 28 10:25:21 2010 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CC755106566C for ; Tue, 28 Sep 2010 10:25:21 +0000 (UTC) (envelope-from s.dave.jones@gmail.com) Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com [209.85.216.182]) by mx1.freebsd.org (Postfix) with ESMTP id 84B388FC1C for ; Tue, 28 Sep 2010 10:25:21 +0000 (UTC) Received: by qyk7 with SMTP id 7so6339873qyk.13 for ; Tue, 28 Sep 2010 03:25:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=L66YIIqig/B7JDJ0tzW4rI7HjAOkXdNoeWK/PgPqaK8=; b=IwEJt3a9R9JRtGLxVFItVLn6BRk3uyJmv9Cq9ln9zwyZDzfECODl5bh9UPzuriNMZ1 yQSWuOsvZl0M1BguY4lHXmzBVHiPrCFfSAiev7S+p0+d3Dm91n3gm+ZU44PrId7JRN9N GU4d5J8Nx+Tv3cAx2jwbAm2UI2SIgN1Ypyofc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=dT35C/pUt9xINICUmpve0NJyVH6qKqLoKewkwwVcZ5Lec9RAu6hQUGUfHkxxSjCKjz oSgnMh0Rii2cdM2PSG0WD0BL/UzYDyC8ccYtUrOOc3M0tvisYJaisyCR/SQ8zmpqadzo QlE/2+PxH3mvwTcVOI4bK7nA3m77/85pgCAuc= MIME-Version: 1.0 Received: by 10.220.157.139 with SMTP id b11mr2761840vcx.11.1285667933455; Tue, 28 Sep 2010 02:58:53 -0700 (PDT) Received: by 10.220.202.136 with HTTP; Tue, 28 Sep 2010 02:58:53 -0700 (PDT) Date: Tue, 28 Sep 2010 17:58:53 +0800 Message-ID: From: dave jones To: freebsd-net@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Subject: UDP socket disconnect problem X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Sep 2010 10:25:21 -0000 Hello, In Linux, I can disconnect the socket using: sa.sin_family = AF_UNSPEC; val = connect(sockfd, (struct sockaddr *)&sa, sizeof(sa)); the return value of val is 0; on freebsd, the return value of connect() is -1. According to Linux's connect(2) man page: Connectionless sockets may dissolve the association by connecting to an address with the sa_family member of sockaddr set to AF_UNSPEC but FreeBSD's connect says: Datagram sockets may dissolve the association by connecting to an invalid address, such as a null address. I try to convert above code to memset(&sa, 0, sizeof(sa)); sa.sin_addr.s_addr = htonl(INADDR_ANY); val = connect(sockfd, (struct sockaddr *)&sa, sizeof(sa)); the return value of val still -1. Any idea? Thanks. Regards, Dave.