home *** CD-ROM | disk | FTP | other *** search
- /* socket_subr . c
- #
- % Copyright (c) Jin Guojun
- %
- % Scoket subroutines
- %
- % AUTHOR: Jin Guojun - LBL 01/01/93
- */
-
- #include <sys/file.h>
- #include "net_need.h"
-
- short
- get_addr(char* host, long* addr_op)
- {
- short family=AF_INET;
- union {
- long i;
- unsigned char c[4];
- } addr;
- if (isdigit(*host)) {
- #ifdef NO_INET
- int a[4];
- sscanf(host, "%d.%d.%d.%d", a, a+1, a+2, a+3);
- addr.c[0] = a[0], addr.c[1] = a[1], addr.c[2] = a[2], addr.c[3] = a[3];
- *addr_op = addr.i;
- message("IP => %d.%d.%d.%d\n", a[0], a[1], a[2], a[3]);
- #else
- *addr_op = inet_addr(host);
- #endif
- }
- else {
- struct hostent *h_p; /* host ptr */
- if ((h_p=gethostbyname(host)) == NULL)
- syserr("? host %s", host);
- memcpy(addr_op, h_p->h_addr_list[0], h_p->h_length);
- family = h_p->h_addrtype;
- }
- #ifdef _DEBUG_
- message("IP = %s\n", inet_ntoa(addr_op));
- #endif
- return family;
- }
-
- unsigned short
- get_port(char* s_name, bool udp)
- {
- register unsigned short port;
- if (isdigit(*s_name)) port = atoi(s_name);
- else {
- struct servent *s_p;
- if (!(s_p = getservbyname(s_name, udp ? "udp" : "tcp")))
- syserr("? server %s", s_name);
- port = s_p->s_port;
- }
- return htons(port);
- }
-
-
- s_buf_size(int s, int buf_size)
- {
- int n;
- #ifdef _DEBUG_
- int o_test, test;
- n = sizeof(test);
- n = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &o_test, &n);
- #endif
- if (setsockopt(s, SOL_SOCKET, SO_RCVBUF, &buf_size,
- sizeof(buf_size) ) < 0)
- prgmerr(1, "sockbuf size %d", buf_size);
- #ifdef _DEBUG_
- n = sizeof(test);
- n = getsockopt(s, SOL_SOCKET, SO_RCVBUF, &test, &n);
- message("recv size from %d to %d [%d]\n", o_test, test, n);
-
- n = sizeof(test);
- n = getsockopt(s, SOL_SOCKET, SO_SNDBUF, &o_test, &n);
- #endif
- if (setsockopt(s,SOL_SOCKET,SO_SNDBUF, &buf_size,
- sizeof(buf_size) ) < 0)
- prgmerr(1, "sockbuf size %d", buf_size);
- #ifdef _DEBUG_
- n = sizeof(test);
- n = getsockopt(s,SOL_SOCKET,SO_SNDBUF, &test, &n);
- message("send size from %d to %d [%d]\n", o_test, test, n);
- #endif
- }
-