1 /* inet.c -- network management stuff
3 * author: hackbard@hackdaworld.dyndns.org
9 int network_init(t_ivac *ivac) {
13 puts("[ivac] inet: initializing network ...");
15 memset(ivac->net.connection,0,MAX_CONNECTIONS*sizeof(t_connection));
17 if((ivac->net.l_fd=socket(AF_INET,SOCK_STREAM,0))==-1) {
18 perror("[ivac] inet.c: socket call");
22 memset(&addr,0,sizeof(struct sockaddr));
23 addr.sin_family=AF_INET;
24 addr.sin_port=htons(ivac->net.l_port);
25 addr.sin_addr.s_addr=INADDR_ANY;
27 if(bind(ivac->net.l_fd,(struct sockaddr *)&addr,
28 sizeof(struct sockaddr))==-1) {
29 perror("[ivac] inet.c: bind call");
33 printf("[ivac] inet: listen on %s port %d.\n",inet_ntoa(addr.sin_addr.s_addr)
39 int network_manage_connection(t_ivac *ivac) {
44 for(i=0;i<MAX_CONNECTIONS;i++) {
46 if(ivac->net.connection[i].status&C_IN_USE) {
48 if(ivac->net.connection[i].status&C_HANGUP) {
49 close(ivac->net.connection[i].fd);
50 ivac->net.connection[i].status=0;
53 if(ivac->net.connection[i].status&C_INFO_A) {
55 if(!ivac->net.connection[i].status&C_SOCKET) {
56 if((ivac->net.connection[i].fd=socket(AF_INET,SOCK_STREAM,0))==-1) {
57 perror("[ivac] inet.c: socket call");
62 if(!ivac->net.connection[i].status&C_ESTABL) {
64 memset(&addr,0,sizeof(struct sockaddr));
65 addr.sin_family=AF_INET;
66 addr.sin_port=htons(ivac->net.connection[i].port);
67 addr.sin_addr_s_addr=inet_aton(ivac->net.connection[i].ip);
69 if(connect(ivac->net.connection[i].fd,(struct sockaddr *)&addr,
70 sizeof(struct sockaddr))==-1) {
71 perror("[ivac] inet.c: connect call");
86 int network_send(unsigned char *data,int datasize,int sendmask,t_ivac *ivac) {