From owner-freebsd-questions@FreeBSD.ORG Tue Dec 21 09:32:39 2010 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0F3F6106566C for ; Tue, 21 Dec 2010 09:32:39 +0000 (UTC) (envelope-from hedayati.mo@gmail.com) Received: from mail-wy0-f196.google.com (mail-wy0-f196.google.com [74.125.82.196]) by mx1.freebsd.org (Postfix) with ESMTP id 9C6B38FC15 for ; Tue, 21 Dec 2010 09:32:37 +0000 (UTC) Received: by wyb40 with SMTP id 40so1414762wyb.7 for ; Tue, 21 Dec 2010 01:32:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:from:date :message-id:subject:to:content-type; bh=YIFbkYPTWTjwlbMKu70c1dKR7HhgZL+H7GvZEe7GZgg=; b=oyhCGETlk9El/Lt9z21tPXof7Z8u5/020rO+06fsBacbMiS7ObwW2ANLeWsISpXmDP xmyIOG8dafR5VqekqgQgHvDINrom8SJPYZ//dHfINLAx1J6OMiOTKvVoB0HyaS8V7NI6 cNyrITk4SyyewTU1PiUWQ7c1wYFBF/O8lIj4Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; b=HJ4BRR0Zu6xxTiUCwBl2HujptiX5d4KmUpZqU8/4SVPIFj/G5Jj3qhO2vNIBMgbn3f 12x0r5ywcO2L0j1+HttZt84+JeYPBEy3HYivPbC552razpM5/zuAftcIwlW+X3ykO/cn 5DzriI13rbXqGNrYUMNVxz3hJXQckHY0WicZo= Received: by 10.227.154.7 with SMTP id m7mr3251870wbw.2.1292922850220; Tue, 21 Dec 2010 01:14:10 -0800 (PST) MIME-Version: 1.0 Received: by 10.227.143.202 with HTTP; Tue, 21 Dec 2010 01:13:30 -0800 (PST) From: Mohammad Hedayati Date: Tue, 21 Dec 2010 12:43:30 +0330 Message-ID: To: freebsd-questions@freebsd.org Content-Type: text/plain; charset=UTF-8 Subject: soaccept X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Dec 2010 09:32:39 -0000 I'm about to use a char device for a kind of distributed processing, so I've coded the open function as follows. The problem is that soaccept returns 0 without populating the raddr. I've checked netstat, everything seems to be fine, the socket is created, bound and the state is LISTENING. Even the remote is connection is ESTABLISHED. But, it cannot receive anything. int open(struct cdev *dev, int flag, int otyp, struct thread *td) { uprintf("in open...\n"); int error = -1; socktd = td; error = socreate(AF_INET, &sock, SOCK_STREAM, IPPROTO_TCP, td->td_proc->p_ucred, socktd); if(error != 0) return error; sockaddr.sin_len = sizeof(struct sockaddr_in); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(1234); sockaddr.sin_addr.s_addr = INADDR_ANY; error = sobind(sock, (struct sockaddr *)&sockaddr, socktd); uprintf("sobind error = %d\n", error); error = solisten(sock, 5, socktd); uprintf("solisten error = %d\n", error); error = soaccept(sock, (struct sockaddr **)&raddr); uprintf("soaccept error = %d, ip=%s\n", error, inet_ntoa(raddr->sin_addr)); uprintf("out open...\n"); return(error); } int read(struct cdev *dev, struct uio *uio, int ioflag) { int error = 0; error = soreceive(sock, (struct sockaddr **)&raddr, uio, NULL, NULL, NULL); return(error); }