|
|
1.1 ! root 1: /* $Header: ctl.c,v 1.2 85/01/09 13:04:43 rcs Exp $ */ ! 2: ! 3: /* This file handles haggling with the various talk daemons to ! 4: get a socket to talk to. sockt is opened and connected in ! 5: the progress ! 6: */ ! 7: ! 8: #include "talk_ctl.h" ! 9: ! 10: struct sockaddr_in daemon_addr = { AF_INET }; ! 11: struct sockaddr_in ctl_addr = { AF_INET }; ! 12: struct sockaddr_in my_addr = { AF_INET }; ! 13: ! 14: /* inet addresses of the two machines */ ! 15: struct in_addr my_machine_addr; ! 16: struct in_addr his_machine_addr; ! 17: ! 18: u_short daemon_port; /* port number of the talk daemon */ ! 19: ! 20: int ctl_sockt; ! 21: int sockt; ! 22: int invitation_waiting = 0; ! 23: ! 24: CTL_MSG msg; ! 25: ! 26: open_sockt() ! 27: { ! 28: int length; ! 29: ! 30: my_addr.sin_addr = my_machine_addr; ! 31: my_addr.sin_port = 0; ! 32: ! 33: sockt = socket(AF_INET, SOCK_STREAM, 0, 0); ! 34: ! 35: if (sockt <= 0) { ! 36: p_error("Bad socket"); ! 37: } ! 38: ! 39: if ( bind(sockt, &my_addr, sizeof(my_addr)) != 0) { ! 40: p_error("Binding local socket"); ! 41: } ! 42: ! 43: length = sizeof(my_addr); ! 44: ! 45: if (getsockname(sockt, &my_addr, &length) == -1) { ! 46: p_error("Bad address for socket"); ! 47: } ! 48: ! 49: } ! 50: ! 51: /* open the ctl socket */ ! 52: ! 53: open_ctl() ! 54: { ! 55: int length; ! 56: ! 57: ctl_addr.sin_port = 0; ! 58: ctl_addr.sin_addr = my_machine_addr; ! 59: ! 60: ctl_sockt = socket(AF_INET, SOCK_DGRAM, 0, 0); ! 61: ! 62: if (ctl_sockt <= 0) { ! 63: p_error("Bad socket"); ! 64: } ! 65: ! 66: if (bind(ctl_sockt, &ctl_addr, sizeof(ctl_addr), 0) != 0) { ! 67: printf("Address is: "); ! 68: print_addr(ctl_addr); ! 69: p_error("Couldn't bind to control socket"); ! 70: } ! 71: ! 72: length = sizeof(ctl_addr); ! 73: if (getsockname(ctl_sockt, &ctl_addr, &length) == -1) { ! 74: p_error("Bad address for ctl socket"); ! 75: } ! 76: } ! 77: ! 78: /* print_addr is a debug print routine. moved to print.c */ ! 79: /* ! 80: /*print_addr(addr) ! 81: /*struct sockaddr_in addr; ! 82: /*{ ! 83: /* int i; ! 84: /* ! 85: /* printf("addr = %x, port = %o, family = %o zero = ", ! 86: /* addr.sin_addr, addr.sin_port, addr.sin_family); ! 87: /* ! 88: /* for (i = 0; i<8;i++) { ! 89: /* printf("%o ", (int)addr.sin_zero[i]); ! 90: /* } ! 91: /* putchar('\n'); ! 92: /*} ! 93: /**/
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.