Не работает :о)Точнее ситуация такая. После компиляции и запуска программы в первый раз
видим на экране./scan 192.168.0.1 1 100
......
Port: 17 status: 0
Port: 18 status: 0
Port: 19 status: 0
Port: 20 status: 0
Port: 21 status: 0
Port: 22 status: 0
Port: 23 status: 0
Port: 24 status: 0
Port: 25 status: 0
......В общем врет все. Со второго запуска видим.
......
Port: 17 status: -1
Port: 18 status: -1
Port: 19 status: -1
Port: 20 status: -1
Port: 21 status: 0
Port: 22 status: 0
Port: 23 status: -1
Port: 24 status: -1
Port: 25 status: 0
......
Что в принципе соответствует действительности :о)
Тоже самое наблюдается если не запускать прогу пару минут.P.S. Если честно, то эт моя первая попытка ченить написать под UNIX, так что сильно не пинать.
---src---
#include "./include/test.h"
int err_con;
int port_from ;
int port_to;
int sock;
int counter;struct sockaddr_in sock_addr;
struct hostent* hst;void GetParam(int g_argc, char *g_argv[]);
int main(int argc, char *argv[])
{
GetParam(argc,argv);hst = gethostbyname(argv[1]);
for(counter=(int)min(port_from,port_to);counter!=(int)max(port_from,port_to)+1;counter++)
{
sock = socket(AF_INET,SOCK_STREAM,0);bzero(&sock_addr,sizeof(sock_addr));
sock_addr.sin_family = AF_INET;
sock_addr.sin_addr.s_addr = ((struct in_addr*)hst->h_addr_list[0])->s_addr;
sock_addr.sin_port = htons(counter);
bind(sock,(SA*)&sock_addr,sizeof(sock_addr));err_con = connect(sock,(SA *)&sock_addr,sizeof(sock_addr));
printf("Port: %i status: %i \n",counter,err_con);close(sock);
}
return 0;
}void GetParam(int g_argc, char *g_argv[])
{
switch(g_argc)
{
case 3:
port_from = port_to = atoi(g_argv[2]);
if(port_from == 0)
{
printf("Error. Port value = 0\n");
exit(1);
}
break;
case 4:
port_from = atoi(g_argv[2]);
port_to = atoi(g_argv[3]);
if(port_from == 0 || port_to == 0)
{
printf("Error. Port value = 0\n");
exit(1);
}
break;
default:
printf("Usage: scan <host> <port> or scan <host> <port_from> <port_to>\n");
exit(1);
break;
}
}
Сори ...
Сегодня весь инет что за уралом с завидной переодичностью падает. Поэтому отправилось два сообщения.
>Сори ...
>Сегодня весь инет что за уралом с завидной переодичностью падает. Поэтому отправилось
>два сообщения.Нужно скопировать отсюда что нужно (код программный) - а ветку удалить.
По коду ("первый опыт UNIX") - везде, везде ... в каждом вызове - проверяйте код возврата!
>Не работает :о)Посмотрите:
http://qnx.org.ru/index.php?option=com_minibb&action=vthread...
- может чего подскажет ;-)?
Всё ... помоему нашел.Вызов bind() в данном случае не имел смысла (тем более в цикле :о) ).
#include<sys/socket.h>
int bind(int socket, const struct sockaddr *addr, socklen_t addrlen)
"Клиент TCP обычно позволяет ядру выбирать динамически назначаемы порт, если приложение не требует зарезервированного порта ..." и т.д по текстут.е. Если приложение не есть сервер, а простой клиент, и номер порта нам не важен, то и вызов функции bind необязателен.
Надеюсь что я прав :)
Absolutno prav - bind sovershenno zdes' ne nuzhen.
>Всё ... помоему нашел.
>
>Вызов bind() в данном случае не имел смысла (тем более в цикле
>:о) ).
>
>#include<sys/socket.h>
>int bind(int socket, const struct sockaddr *addr, socklen_t addrlen)
>"Клиент TCP обычно позволяет ядру выбирать динамически назначаемы порт, если приложение не
>требует зарезервированного порта ..." и т.д по тексту
>
>т.е. Если приложение не есть сервер, а простой клиент, и номер порта
>нам не важен, то и вызов функции bind необязателен.
>
> Надеюсь что я прав :)