Ich hab ein kleines Problem: ich hab einen kleinen server geschrieben der per shell-skript gestartet wird … nun, wenn ich den server von hand starte geht das ganze ohne problem (der client kann connecten), tu ich das aber eben per skript bekommt der client nur ein connection refused … hat jemand eine idee ?
Es folgen nun: Source für den Server, Source für den Client und das Startskript
/*
Dialserver - © by berni
Under GPL and Open Source
*/
#include
#include
#include
#include
#include
#include
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr(„192.168.9.5“);
server_address.sin_port = 9734;
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
printf(„server waiting\n“);
listen(server_sockfd, 5);
while(1)
{
char ch;
// debug stuff
/* printf(„server waiting\n“); */
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
read(client_sockfd, &ch, 1);
if(ch==‚d‘) system(„isdnctrl dial ippp0 > /dev/null“);
if(ch==‚h‘) system(„isdnctrl hangup ippp0 > /dev/null“);
// ch++;
write(client_sockfd, &ch, 1);
close(client_sockfd);
}
}
/*
A simple Network-Dialclient - © by berni
Under GPL and Open Source
*/
#include
#include
#include
#include
#include
#include
#include
int getchoice(char *greet, char *choices[]);
int main(int argc, char **argv)
{
int sockfd;
int len;
struct sockaddr_in address;
int result;
char cd = ‚d‘;
char *menu[] = {
„d - dial“,
„h - hangup“,
„q - quit“,
NULL,
};
int choice = 0;
do{
sockfd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(„192.168.9.5“);
address.sin_port = 9734;
len = sizeof(address);
choice = getchoice(„Please select an action“, menu);
printf(„You have chosen: %c\n“, choice);
if(choice == ‚d‘)
{
printf(„Dialing\n“);
cd = ‚d‘;
}
if(choice == ‚h‘)
{
printf(„Hanging up\n“);
cd = ‚h‘;
}
if(choice == ‚q‘) exit(1);
result = connect(sockfd, (struct sockaddr *)&address, len);
if(result==-1)
{
perror(„Error: client“);
exit(1);
}
write(sockfd, &cd, 1);
read(sockfd, &cd, 1);
printf(„Answer from server = %c\n“, cd);
close(sockfd);
} while(choice != ‚q‘);
exit(0);
}
int getchoice(char *greet, char *choices[])
{
int chosen = 0;
int selected;
char **option;
do {
printf("\nChoice: %s\n", greet);
option = choices;
while(*option) {
printf("%s\n", *option);
option++;
}
do {
selected = getchar();
} while(selected== ‚\n‘);
option = choices;
while(*option) {
if(selected == *option[0]) {
chosen = 1;
break;
}
option++;
}
if(!chosen) {
printf(„Incorrect choice, select again\n“);
}
} while(!chosen);
return selected;
}
#!/bin/sh
Dial-Server start-script
ACTION=$1
case „$ACTION“ in
start)
echo „Starting dial-server“
/usr/sbin/dial_server &
;;
stop)
echo „Shutting down dial-server“
killall dial_server
;;
*)
echo „Ussage: /sbin/init.d/dial_server {start/stop}“
;;
esac