5 #define BITS_PER_INT 32
6 #define FD_SET(f,fds) (fds)->fds_bits[(f)/BITS_PER_INT]|=(1<<((f)%BITS_PER_INT))
7 #define FD_ZERO(fds) { (fds)->fds_bits[0]=0; (fds)->fds_bits[1]=0; }
13 void bzero( buf, size ) char *buf; int size; {
17 void bcopy( from, to, size ) char *from,*to; int size; {
26 #define INADDR_NONE 0xffffffffUL
30 int sock_open( socket_type, protocol, host, service, port, as_server )
39 struct sockaddr_in my_addr,it_addr,*srv_addr;
44 bzero((char *)&my_addr,sizeof(my_addr));
45 bzero((char *)&it_addr,sizeof(it_addr));
47 my_addr.sin_family=AF_INET;
48 it_addr.sin_family=AF_INET;
50 my_addr.sin_port=htons(0);
51 it_addr.sin_port=htons(0);
53 my_addr.sin_addr.s_addr=htonl(INADDR_ANY);
54 it_addr.sin_addr.s_addr=htonl(INADDR_ANY);
61 if( (pp=getprotobyname(protocol)) == NULL ){
62 fprintf(stderr,"protocol %s unknown\n",protocol);
66 if( service != NULL ){
67 if( (sp=getservbyname(service,protocol)) == NULL ){
68 fprintf(stderr,"port_open:unknown service %s/%s\n",service,protocol);
71 srv_addr->sin_port = sp->s_port;
75 srv_addr->sin_port = htons( port );
78 if( (inaddr = inet_addr(host)) != INADDR_NONE ){
79 /* it is dotted-decimal address */
80 bcopy((char *)&inaddr,(char *)&(srv_addr->sin_addr),sizeof(inaddr));
82 if( (hp = gethostbyname(host)) == NULL ){
83 fprintf(stderr,"port_open:host name error %s\n",host);
86 bcopy(hp->h_addr,(char *)&(srv_addr->sin_addr),hp->h_length);
89 if( (fd = socket(AF_INET,socket_type,pp->p_proto)) < 0 ){
90 perror("port_open:can't create socket");
95 if( bind( fd, (struct sockaddr *)&my_addr, sizeof(my_addr) ) < 0 ){
96 perror("port_open:bind error");
102 if( connect( fd, (struct sockaddr *)&it_addr, sizeof(it_addr) ) < 0 ){
103 perror("port_open:connect error");
112 int sock_cli_send( sock, m, size ) int sock,size; void *m; {
113 if( send(sock, m, size, 0) < 0) {
114 perror("cli:send failed");
123 int sock_poll( sock, ms ) int sock,ms; {
124 struct timeval timeout;
128 timeout.tv_sec = ms/1000;
129 timeout.tv_usec = (ms%1000)*1000;
130 if( sock>=0 ) /* sock==-1 means we only sleep */
131 FD_SET(sock,&rd_fds);
132 nfds = select(sock+1,&rd_fds,NULL,NULL,&timeout);
134 return ( nfds == 1 );
138 static int cli_recv_timeout = 2000 /* miliseconds */;
140 void set_cli_recv_timeout( ms ) int ms; { /* set timeout to miliseconds */
141 cli_recv_timeout = ms;
144 int sock_cli_recv( sock, m, size ) int sock,size; void *m; {
147 nfds = sock_poll(sock,cli_recv_timeout);
148 if( nfds==0 ){ errno=0; return 0; } /* timeout */
150 perror("cli:select failed");
154 if( (recv_size=recv(sock, m, size, 0)) < 0) {
155 perror("cli:recv failed");
163 static int srv_send_wait_time = 1;
165 void set_srv_send_delay( ms ) int ms; { /* set delay to miliseconds */
166 srv_send_wait_time = ms;
169 int sock_srv_send( sock, m, size, addr, namelen )
170 int sock,size,namelen;
172 struct sockaddr_in *addr;
174 sock_poll(-1,srv_send_wait_time);
175 if( sendto(sock,m,size,0,addr,namelen) <= 0) {
176 perror("srv:send failed");
183 int sock_srv_recv( sock, m, size, addr, namelen )
184 int sock,size,*namelen;
186 struct sockaddr_in *addr;
189 if( (recv_size=recvfrom(sock, m, size, 0, addr, namelen )) < 0) {
190 perror("srv:recvfrom");