82 lines
1.5 KiB
C
82 lines
1.5 KiB
C
/*
|
|
** CVS: $Id: comfunc.c,v 1.3 2001/01/20 19:58:49 zhangsz Exp $
|
|
**
|
|
** Title: comfunc.c
|
|
** Author: Zhang Shuzhong
|
|
** Date: 2000.07.03
|
|
**
|
|
** Description: Functions of comunication for PACS WLL.
|
|
**
|
|
*/
|
|
|
|
#include "../../public/src/include/includes.h"
|
|
|
|
/*
|
|
** passivesock - allocate & bind a server socket using TCP or UDP
|
|
*/
|
|
|
|
/*@ignore@*/
|
|
int
|
|
passivesock( const char * transport, u_short portbase, int qlen)
|
|
{
|
|
struct sockaddr_in sin;
|
|
int s, type;
|
|
|
|
memset(& sin, 0, sizeof(sin));
|
|
sin.sin_family = AF_INET;
|
|
sin.sin_port = htons(portbase);
|
|
sin.sin_addr.s_addr = INADDR_ANY;
|
|
bzero(&(sin.sin_zero), 8);
|
|
|
|
if ( strcmp(transport, "UDP") == 0)
|
|
type = SOCK_DGRAM;
|
|
else
|
|
type = SOCK_STREAM;
|
|
s = socket(AF_INET, type, 0);
|
|
if (s < 0) {
|
|
perror("socket");
|
|
return -3;
|
|
}
|
|
if (bind(s, (struct sockaddr *) & sin, sizeof(sin)) < 0) {
|
|
perror("bind");
|
|
close(s);
|
|
return -4;
|
|
}
|
|
|
|
if (type == SOCK_STREAM && listen(s, qlen) < 0) {
|
|
perror("listen");
|
|
close(s);
|
|
return -5;
|
|
}
|
|
return s;
|
|
}
|
|
|
|
/*
|
|
** passiveUDP - create a passive socket for use in a UDP server
|
|
*/
|
|
|
|
int
|
|
passiveUDP(u_short portbase)
|
|
{
|
|
return (passivesock("UDP", portbase, 0) );
|
|
}
|
|
|
|
const char *
|
|
Inet_ntoa(const long addr)
|
|
{
|
|
struct sockaddr_in sin;
|
|
|
|
sin.sin_addr.s_addr = addr;
|
|
return ((char *) inet_ntoa(sin.sin_addr) );
|
|
}
|
|
|
|
const long
|
|
Inet_pton(const char *sp)
|
|
{
|
|
struct in_addr i_addr;
|
|
|
|
inet_pton(AF_INET, sp, &i_addr);
|
|
return i_addr.s_addr;
|
|
}
|
|
/*@end@*/
|