[c] socket , porty :)

0

Mógłby ktoś mnie jakoś naprowadzić jak zrobić żeby np. w programie , w argv[1] i argv[2] podaje jakies liczby, i to będzie zakres portów, np. 1 20 i chce zeby program ladowal sie na każdy z tych portów tj otwierał je :) próbował mniej wiecej coś takiego :)

[code]

...
main(int argc , char *argv[])
{
int port;
struct sockaddr_in adres
/.../

for ( port = argv[1]; port < argv[2]; port++ )
/.../
adres.sin_port = htons(port);
/../

}
[/code]

ale to jakos za bardzo nie działa, czy ma ktoś może jakis inny pomysl ? :)

0

BO masz malenki ;) blad :
<cpp>
int port;
struct sockaddr_in adres;
/.../

for ( port = atoi(argv[1]); port < atoi(argv[2]); port++ ) {
/.../
adres.sin_port = htons(port);
/../

}
<cpp>
i teraz jest OK. w argv[] sa lancuchy znakow (charow) wiec najpierw musisz
je przerobic na inty a dopiro potem przypisywac badz porownywac z intami !!!!
Poza tym porty do 1024 sa przeznaczone raczej do uzytku systemowych zabawek ;)
wiec musisz byc rootem i do tego wiedziec co robisz zajmujac te portu - nie ktorych
sie nie da.

0

no to mam drobny problem, mniej wiecej mam to tak:

main(int argc, char *argv[])
{
int port;
int accp;
int sock;

struct sockaddr_in addr;

addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY

for( port = atoi(argv[1]); port < atoi(argv[2]); port++ ) {
addr.sin_port = htons(port);
}

socket(..);
bind(..);
listen(..);
accept(..);

itd.. :))
heh, no i takie jest problem, że np. w argv[1] podaje mu 1, a argv[2] daje mu 10, to program laduje sie na port 9, albo daje 2 12 , to laduje sie na 10 , czemu tak ? ;) a chce zeby jak podam mu 1 10 zeby ladowal sie na porty 1 do 10 :)

0

Jesli tak to wtedy socket, bind, listen musisz podac tez w forze bezposrednio po wrzuceniu portu do struktury !! [diabel] Bo jesli nie to tylko przelatujesz wszystkie numerki a tylko ostatni port jest nastepnie obslugiwany :-)

Poza tym musisz wykorzystac select lub poll(jesli sie nie myle tak to sie pisalo) do obslugi tych wszystkich portow ale najpierw musisz jsockety ustawic na O_NONBLOCK bo accept na jednym porcie zablokuje wszystko pozostale i wtopa a select bedzie monitorowal wwszystkie deskryptory (sockety) ktore mu podamy !!

1 użytkowników online, w tym zalogowanych: 0, gości: 1