delorie.com/archives/browse.cgi | search |
X-Recipient: | archive-cygwin AT delorie DOT com |
DomainKey-Signature: | a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:subject:to:references:from:message-id:date | |
:mime-version:in-reply-to:content-type | |
:content-transfer-encoding; q=dns; s=default; b=A0uwlRtTQXm4g/9b | |
S2Y32AfRSLE1PWnIqiL4jP1sUYW5yCk4XGeyFKZ60rRgpUhxo6B8gKYvOs4fs38Q | |
1Ms5vf/d4IoWWSqF4Js4DlnfJEodFjJMEWr9eJY9kpRmPj+Adj9hQJqqwjRNx+Qb | |
oJKkEON0BHLYi1F3Y4w0XY+uqSI= | |
DKIM-Signature: | v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id |
:list-unsubscribe:list-subscribe:list-archive:list-post | |
:list-help:sender:subject:to:references:from:message-id:date | |
:mime-version:in-reply-to:content-type | |
:content-transfer-encoding; s=default; bh=03YrcFKrXP1lURo+Y3tdRX | |
Wosao=; b=Wkstwq7WAwf69cyb+OOCq1n7N1v2tI00pd6CWz8OnRCFMqgg9h2g0N | |
jCqbaj2OrB0ySrVN3+5dPGFpdBJwajZpnr/+4x6aOZdbmrYmaBgHZ1pc0HoEAeW9 | |
wVCe98Cx0mp5KYMVU5sTkXdga3yKWfUgPSQ5+SbzgmPO6p1K6tiKs= | |
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
List-Id: | <cygwin.cygwin.com> |
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
List-Archive: | <http://sourceware.org/ml/cygwin/> |
List-Post: | <mailto:cygwin AT cygwin DOT com> |
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
Sender: | cygwin-owner AT cygwin DOT com |
Mail-Followup-To: | cygwin AT cygwin DOT com |
Delivered-To: | mailing list cygwin AT cygwin DOT com |
Authentication-Results: | sourceware.org; auth=none |
X-Virus-Found: | No |
X-Spam-SWARE-Status: | No, score=1.7 required=5.0 tests=AWL,BAYES_50,KAM_LAZY_DOMAIN_SECURITY autolearn=no version=3.3.2 spammy=adress, hallo, delivers, H*c:ISO-8859-1 |
X-HELO: | m0.truegem.net |
Subject: | Re: RPC clnt_create() adress already in use |
To: | cygwin AT cygwin DOT com |
References: | <59D90AF8D70E9740907BACDE2BCB52083660696D AT RESW103 DOT resdom01 DOT local> |
From: | Mark Geisert <mark AT maxrnd DOT com> |
Message-ID: | <a71a91b5-c8cd-f612-a5e8-aa4e65967387@maxrnd.com> |
Date: | Wed, 27 Sep 2017 02:49:57 -0700 |
User-Agent: | Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0 SeaMonkey/2.46 |
MIME-Version: | 1.0 |
In-Reply-To: | <59D90AF8D70E9740907BACDE2BCB52083660696D@RESW103.resdom01.local> |
Hello Raimund, Let's keep this on the mailing list please. PAULUS, Raimund, TI-ABN wrote: > Hallo Mark Geisert, > > many thanks for your answer. I supposed this too. > > I included in my source code the following function calls after clnt_create(): > > int fd = 0; > bool bool_ret = clnt_control(cl, CLGET_FD, &fd); if(bool_ret == true) { > printf("fd: %d\n", fd); > > int enable = 1; > retval = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)); > if(retval < 0) > fprintf(stderr, "Fehler setsockopt(): %s\n", strerror(errno)); } > > The function clnt_control() delivers the socket of the RPC-Client-Handle. > The result is the same as before. Moreover i think, the effect of setsockopt() would be valid only during the process is running (my test scenarios 1 and 2). > But it wouldn't change anything regarding my test scenario 3 (several restarts). > > Raimund I looked through the libtirpc source code and nowhere is SO_REUSEADDR being set. You are on the right track with how to do it, but by the time clnt_create() returns to you it is already too late. As far as I can tell there is no way to get access to the socket between the time it's created within libtirpc and the time it's made available to you by clnt_create(). I did try running your testcase (thanks for supplying that) but I don't have a local machine running RPC services and don't wish to poke at random machines on the Internet ;-). I had to compile it as so: gcc -g -o test_rpc -I/usr/include/tirpc test_rpc.c -ltirpc You are taking care to compile against the correct RPC-package includes and link against the correct RPC-package libraries, yes? Speculation: There might be a way to decompose what clnt_create() does into other libtirpc functions that accomplish the same thing, but in smaller pieces such that you could set the socket option before bind() is called. That would be a fair amount of work though and given my cursory look at the source I don't know if it's even possible. ..mark -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
webmaster | delorie software privacy |
Copyright © 2019 by DJ Delorie | Updated Jul 2019 |