#include #include #include #include #include #include #include #include int main(int argc,char** argv) { //usage if(argc != 2){ printf("Usage :\n\tx25server \n"); return -2; } int x25_socket,x25_client; x25_socket = socket(PF_X25, SOCK_SEQPACKET, 0); if( x25_socket == -1){ printf("X25:create socket error (%d)\n",errno); return -1; } else printf("X25: socket created\n"); struct sockaddr_x25 addr; addr.sx25_family = AF_X25; strcpy(addr.sx25_addr.x25_addr,argv[1]); unsigned char qbit = 0; socklen_t opt_len = sizeof(qbit); if(getsockopt(x25_socket,SOL_X25,X25_QBITINCL,&qbit,&opt_len) == -1){ printf("X25: get socket option error (%d)(%s)\n",errno,strerror(errno)); // return -1; } else printf("X25: get socket option qbit = %u\n",qbit); struct x25_facilities facil; memset(&facil,0,sizeof(facil)); facil.pacsize_in = X25_PS1024; facil.pacsize_out = X25_PS1024; facil.winsize_in = 7; facil.winsize_out = 7; if(ioctl(x25_socket,SIOCX25SFACILITIES,&facil) == -1){ printf("X25: set socket facility error (%d)(%s)\n",errno,strerror(errno)); // return -1; } else printf("X25: set socket facility OK\n"); if(bind(x25_socket,(struct sockaddr*)&addr,sizeof(addr)) == -1){ printf("X25:bind socket error (%d)\n",errno); return -1; } else printf("X25: socket bind to %s\n",addr.sx25_addr.x25_addr); printf("X25: start listen ...\n"); if(listen(x25_socket,10) == -1){ printf("X25: listen socket error (%d)(%s)\n",errno,strerror(errno)); return -1; } else printf("X25: socket listening\n"); struct sockaddr_x25 from_addr; socklen_t from_addr_len = sizeof(from_addr); if((x25_client=accept(x25_socket,(struct sockaddr*)&from_addr,&from_addr_len)) == -1){ printf("X25: accept socket error (%d)(%s)\n",errno,strerror(errno)); return -1; } else printf("X25: socket accept from %s\n",((from_addr_len != 0)?from_addr.sx25_addr.x25_addr:"EMPTY")); char msg[64]; int nr; nr = read(x25_client,msg,64);//MSG_WAITALL); printf("X25: from client: %s (%d)\n",msg,nr); strcpy(msg,"Hi client !!!\0"); nr = write(x25_client,msg,strlen(msg)+1); printf("X25: to client: %s (%d)\n",msg,nr); if(close(x25_client) == -1)printf("X25: client close socket (%d)\n",errno); else printf("X25: client closed\n"); // sleep(3); if(close(x25_socket) == -1)printf("X25: close socket (%d)\n",errno); else printf("X25: socket closed\n"); return 0; }