* Copyright (c) 1983 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
static char sccsid
[] = "@(#)look_up.c 5.2 (Berkeley) %G%";
* See if the local daemon has an invitation for us.
register CTL_RESPONSE
*rp
= &response
;
/* the rest of msg was set up in get_names */
msg
.ctl_addr
= *(struct sockaddr
*)&ctl_addr
;
msg
.ctl_addr
.sa_family
= htons(msg
.ctl_addr
.sa_family
);
/* must be initiating a talk */
if (!look_for_invite(rp
))
* There was an invitation waiting for us,
* so connect with the other (hopefully waiting) party
current_state
= "Waiting to connect with caller";
if (rp
->addr
.sa_family
!= AF_INET
)
p_error("Response uses invalid network address");
if (connect(sockt
, &rp
->addr
, sizeof (rp
->addr
)) != -1)
} while (errno
== EINTR
);
if (errno
== ECONNREFUSED
) {
* The caller gave up, but his invitation somehow
* was not cleared. Clear it and initiate an
* invitation. (We know there are no newer invitations,
ctl_transact(his_machine_addr
, msg
, DELETE
, rp
);
p_error("Unable to connect with initiator");
* Look for an invitation on 'machine'
struct in_addr machine_addr
;
current_state
= "Checking for invitation on caller's machine";
ctl_transact(his_machine_addr
, msg
, LOOK_UP
, rp
);
/* the switch is for later options, such as multiple invitations */
msg
.id_num
= htonl(rp
->id_num
);
/* there wasn't an invitation waiting for us */