Files
svc.ems/plat/iptrans/src/comfunc.c
2024-09-27 15:39:34 +08:00

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@*/