add option base
This commit is contained in:
parent
9ff0082313
commit
61830ba554
42
p-server.c
42
p-server.c
@ -173,6 +173,39 @@ int send_response(int sock,int fd, uint8_t * buf, size_t bufsize){
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
const char * help(const char * n){
|
||||
const char * msg = "USASE : %s [Option] ...\n"
|
||||
"Options and arguments: \n"
|
||||
"-p port\t:set to port binding. couldn't set to 0\n"
|
||||
"-h\t:print help message.\n";
|
||||
printf(msg,n);
|
||||
return msg;
|
||||
}
|
||||
/** return 0 ok. otherwise invalid format*/
|
||||
int parse_args(int argc,const char * argv[] , in_port_t * port){
|
||||
int pos = 1;
|
||||
const char * opt;
|
||||
while (pos < argc)
|
||||
{
|
||||
opt = argv[pos++];
|
||||
if (strcmp(opt,"-h") == 0 || strcmp(opt,"--help") == 0)
|
||||
{
|
||||
help(argv[0]);
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(opt,"-p") == 0 || strcmp(opt,"--port") == 0){
|
||||
if (pos < argc){
|
||||
const char * value = argv[pos++];
|
||||
*port = atoi(value);
|
||||
if (port == 0){ // either not number or zero
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
else return 2; //failed to find argument.
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static int sock;
|
||||
void safe_exit(){
|
||||
close(sock);
|
||||
@ -185,6 +218,11 @@ int main(int argc, const char *argv[]){
|
||||
int csock;
|
||||
int bufsize;
|
||||
int i;
|
||||
in_port_t binding_port_number = SERVER_PORT;
|
||||
if (argc > 1){
|
||||
int d = parse_args(argc,argv,&binding_port_number);
|
||||
if(d != 0 ) return d;
|
||||
}
|
||||
sock = socket(AF_INET,SOCK_STREAM,0);
|
||||
atexit(safe_exit);
|
||||
if(sock < 0){
|
||||
@ -206,7 +244,7 @@ int main(int argc, const char *argv[]){
|
||||
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY); /*0.0.0.0 모든 네트워크 인터페이스에 묶임.*/
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(SERVER_PORT);
|
||||
addr.sin_port = htons(binding_port_number);
|
||||
|
||||
if(bind(sock, (struct sockaddr *)&addr,sizeof(addr)) < 0){
|
||||
perror("bind failed");
|
||||
@ -215,7 +253,7 @@ int main(int argc, const char *argv[]){
|
||||
char ip_buf[INET_ADDRSTRLEN];
|
||||
const char * msg = inet_ntop(AF_INET,&addr.sin_addr,ip_buf,sizeof(ip_buf));
|
||||
assert(msg != NULL);
|
||||
fprintf(stderr,"server bind on %s:%d\n",msg ,SERVER_PORT);
|
||||
fprintf(stderr,"server bind on %s:%d\n",msg ,binding_port_number);
|
||||
}
|
||||
if(listen(sock,MAX_LISTEN_SOCKET) < 0){
|
||||
perror("listen failed");
|
||||
|
43
server.c
43
server.c
@ -171,6 +171,39 @@ int send_response(int sock,int fd, uint8_t * buf, size_t bufsize){
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
const char * help(const char * n){
|
||||
const char * msg = "USASE : %s [Option] ...\n"
|
||||
"Options and arguments: \n"
|
||||
"-p port\t:set to port binding. couldn't set to 0\n"
|
||||
"-h\t:print help message.\n";
|
||||
printf(msg,n);
|
||||
return msg;
|
||||
}
|
||||
/** return 0 ok. otherwise invalid format*/
|
||||
int parse_args(int argc,const char * argv[] , in_port_t * port){
|
||||
int pos = 1;
|
||||
const char * opt;
|
||||
while (pos < argc)
|
||||
{
|
||||
opt = argv[pos++];
|
||||
if (strcmp(opt,"-h") == 0 || strcmp(opt,"--help") == 0)
|
||||
{
|
||||
help(argv[0]);
|
||||
return 2;
|
||||
}
|
||||
else if(strcmp(opt,"-p") == 0 || strcmp(opt,"--port") == 0){
|
||||
if (pos < argc){
|
||||
const char * value = argv[pos++];
|
||||
*port = atoi(value);
|
||||
if (port == 0){ // either not number or zero
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
else return 2; //failed to find argument.
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sock;
|
||||
void safe_exit(){
|
||||
@ -183,6 +216,12 @@ int main(int argc, const char *argv[]){
|
||||
socklen_t client_addr_len = sizeof(client_addr);
|
||||
int csock;
|
||||
int bufsize;
|
||||
in_port_t binding_port_number = SERVER_PORT;
|
||||
if (argc > 1){
|
||||
int d = parse_args(argc,argv,&binding_port_number);
|
||||
if(d != 0 ) return d;
|
||||
}
|
||||
|
||||
sock = socket(AF_INET,SOCK_STREAM,0);
|
||||
atexit(safe_exit);
|
||||
if(sock < 0){
|
||||
@ -204,7 +243,7 @@ int main(int argc, const char *argv[]){
|
||||
|
||||
addr.sin_addr.s_addr = htonl(INADDR_ANY); /*0.0.0.0 모든 네트워크 인터페이스에 묶임.*/
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(SERVER_PORT);
|
||||
addr.sin_port = htons(binding_port_number);
|
||||
|
||||
if(bind(sock, (struct sockaddr *)&addr,sizeof(addr)) < 0){
|
||||
perror("bind failed");
|
||||
@ -213,7 +252,7 @@ int main(int argc, const char *argv[]){
|
||||
char ip_buf[INET_ADDRSTRLEN];
|
||||
const char * msg = inet_ntop(AF_INET,&addr.sin_addr,ip_buf,sizeof(ip_buf));
|
||||
assert(msg != NULL);
|
||||
fprintf(stderr,"server bind on %s:%d\n",msg ,SERVER_PORT);
|
||||
fprintf(stderr,"server bind on %s:%d\n",msg ,binding_port_number);
|
||||
}
|
||||
|
||||
if(listen(sock,1) < 0){
|
||||
|
Loading…
Reference in New Issue
Block a user