aboutsummaryrefslogtreecommitdiffstats
path: root/setup_socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'setup_socket.c')
-rw-r--r--setup_socket.c242
1 files changed, 0 insertions, 242 deletions
diff --git a/setup_socket.c b/setup_socket.c
deleted file mode 100644
index 3625a2a..0000000
--- a/setup_socket.c
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- Copyright (C) 2006 Renaissance Technologies Corp.
- main developer: HP Wei <hp@rentec.com>
- make it IPv6-ready
- Copyright (C) 2005 Renaissance Technologies Corp.
- file name is changed from main.c to setup_socket.c
- Copyright (C) 2001 Renaissance Technologies Corp.
- main developer: HP Wei <hp@rentec.com>
- This file was modified in 2001 and later from files in the program
- multicaster copyrighted by Aaron Hillegass as found at
- <http://sourceforge.net/projects/multicaster/>
-
- Copyright (C) 2000 Aaron Hillegass <aaron@classmax.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-/*
- This part was based on
- (1) codes by Aaron Hillegass <aaron@classmax.com>
- (2) codes in Steven's book 'network programming'
-
- 200605 change it to make it IPv6 ready
-
-*/
-
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
-#include <arpa/inet.h> /* inet(3) functions */
-#include <errno.h>
-
-extern int verbose;
-int delay_sec;
-int delay_usec;
-
-
-/* Set up for catcher's complaint socket */
-#ifndef IPV6
-int complaint_socket(struct sockaddr_in *addr, int port)
-#else
-int complaint_socket(struct sockaddr_in6 *addr, int port)
-#endif
-{
- int fd, sockaddr_len;
- sa_family_t family;
- if (verbose>=2) fprintf(stderr, "in send_socket_ip\n");
-
- #ifndef IPV6
- /* IPv4 */
- sockaddr_len = sizeof(struct sockaddr_in);
- memset(addr, 0, sockaddr_len);
- addr->sin_family = AF_INET;
- family = AF_INET;
- addr->sin_port = htons(port);
- /*addr->sin_addr.s_addr = ip; this fx in for init process only
- This ip will be overwritten later after
- 1st packet is received. */
- #else
- /* IPv6 */
- sockaddr_len = sizeof(struct sockaddr_in6);
- memset(addr, 0, sockaddr_len);
- addr->sin6_family = AF_INET6;
- family = AF_INET6;
- addr->sin6_port = htons(port);
- /* addr->sin_addr.s_addr = ip; see comments above */
- #endif
-
- if ((fd = socket(family, SOCK_DGRAM, 0)) < 0){
- perror("Send socket");
- exit(1);
- }
- return fd;
-}
-
-/* Set up mcast send socket for multicaster based on (char*)cp */
-#ifndef IPV6
-int send_socket(struct sockaddr_in *addr, char * cp, int port)
-#else
-int send_socket(struct sockaddr_in6 *addr, char * cp, int port)
-#endif
-{
- int fd, sockaddr_len;
- sa_family_t family;
- char buf[50];
- if (verbose>=2) fprintf(stderr, "in send_socket\n");
-
- #ifndef IPV6
- /* IPv4 */
- sockaddr_len = sizeof(struct sockaddr_in);
- memset(addr, 0, sockaddr_len);
- addr->sin_family = AF_INET;
- family = AF_INET;
- addr->sin_port = htons(port);
- /*addr->sin_addr.s_addr = inet_addr(cp);*/
- inet_pton(AF_INET, cp, &addr->sin_addr);
- /* Print out IP address and port */
- inet_ntop(AF_INET, &addr->sin_addr, buf, 50);
- #else
- sockaddr_len = sizeof(struct sockaddr_in6);
- memset(addr, 0, sockaddr_len);
- addr->sin6_family = AF_INET6;
- family = AF_INET6;
- addr->sin6_port = htons(port);
- /*addr->sin_addr.s_addr = inet_addr(cp);*/
- inet_pton(AF_INET6, cp, &addr->sin6_addr);
- /* Print out IP address and port */
- inet_ntop(AF_INET6, &addr->sin6_addr, buf, 50);
- #endif
-
- if (verbose>=2)
- fprintf(stderr, "Creating a send socket to %s:%d\n", buf, port);
-
- if ((fd = socket(family, SOCK_DGRAM, 0)) < 0){
- perror("Send socket");
- exit(1);
- }
-
- if ((bind(fd, (const struct sockaddr *)addr, sockaddr_len)) < 0){
- perror("in send_socket(): bind error (need to change MCAST_ADDR)");
- exit(1);
- }
- return fd; /*send_socket_ip(addr, address, port);*/
-}
-
-/* set up socket on the receiving end */
-#ifndef IPV6
-int rec_socket(struct sockaddr_in *addr, int port)
-#else
-int rec_socket(struct sockaddr_in6 *addr, int port)
-#endif
-{
- int fd, sockaddr_len;
- sa_family_t family;
-
- #ifndef IPV6
- /* IPv4 */
- sockaddr_len = sizeof(struct sockaddr_in);
- memset(addr, 0, sockaddr_len);
- addr->sin_family = AF_INET;
- family = AF_INET;
- addr->sin_port = htons(port);
- addr->sin_addr.s_addr = htonl(INADDR_ANY);
- #else
- sockaddr_len = sizeof(struct sockaddr_in6);
- memset(addr, 0, sockaddr_len);
- addr->sin6_family = AF_INET6;
- family = AF_INET6;
- addr->sin6_port = htons(port);
- addr->sin6_addr = in6addr_any; /* RS book: page 92 */
- #endif
-
- if((fd = socket(family, SOCK_DGRAM, 0)) < 0){
- perror("Socket create");
- exit(1);
- }
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, NULL, 0);
-
- if (verbose>=2)
- fprintf(stderr, "Creating receive socket on port %d\n", port);
-
- /*if ((bind(fd, addr, sizeof(*addr))) < 0){ MOD by RWM: replaced by next line */
- if ((bind(fd, (const struct sockaddr *)addr, sockaddr_len)) < 0){
- perror("in rec_socket(): bind error (need to change PORT)");
- exit(1);
- }
- return fd;
-}
-
-/*
- set the values of two variables to be used by select()
- in readable().
-*/
-void set_delay(int secs, int usecs)
-{
- if (verbose>=2) {
- if (usecs == -1)
- fprintf(stderr, "Timeout: set to infinite\n");
- else
- fprintf(stderr, "Timeout: set to %d sec + %d usec\n", secs, usecs);
- }
- delay_sec = secs;
- delay_usec = usecs;
-}
-
-void get_delay(int * secs, int * usecs)
-{
- *secs = delay_sec;
- *usecs= delay_usec;
-}
-
-/*
- Check if there is an incoming UDP for a certain amount
- of time period specified in delay_tv..
-
- Return 'true' if there is.
- Return 'false' if no valid UDP has arrived within the time period.
-
- In multicaster, this is used in read_handle_page() right after
- send_page() is carried out. As a result, read_handle_complaint() waits
- for any incoming complaints from any target machines within
- the specified time period. As it is now, no target machine
- will send back complaints during the transmission of all the
- pages for a file. Therefore, read_handle_complaint() serves effectively
- as a time delay between sending of each page.
-*/
-int readable(int fd)
-{
- struct timeval delay_tv;
- fd_set rset;
- FD_ZERO(&rset);
- FD_SET(fd, &rset);
-
- /*
- if microsec == -1 wait forever for a packet.
- This is used in the beginning when multicatcher is just
- invoked.
- */
- if (delay_usec == -1){
- return(select(fd + 1, &rset, NULL, NULL, NULL));
- } else {
- delay_tv.tv_sec = delay_sec;
- delay_tv.tv_usec = delay_usec;
- return (select(fd + 1, &rset, NULL, NULL, &delay_tv));
- }
-}
-