Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
трыблы с сокетом
 
Народ я вот начал писать первую прогу с сокетами у меня есть текст программы но он для юникса, но я изменил несколько подключаемых модулей, удалив те, которые в винде нет. Скомпилировал - всё работает. А прога выдаёт ошибку.
Вот часть кода
1          #include <sys/types.h>           удалил
2          #include <sys/socket.h>        изменил на <winsock2.h>
3          #include <netinet/in.h>           удалил
4          #include <stdio.h>                   Оставил
5          int main (void)            
6          {
7          struct sockaddr_in local;
8          int s;
9          int s1;
10        int rc;
11        char buf [ 1 ];
12        local.sin_family = AF_INET;
13        local.sin_port = htons( 7500 ) ;
14        local.sin_addr.s_ addr = htonl ( INADDR_ANY );
15        s = socket ( AF_INET,   SOCK_STREAM, 0 );
16        if ( s < 0 )
17        {
18          perror("ошибка вызова socket" );
19          exit ( 1 );
20        }
Вот тут и запарывается. Видимо те модули, которые я удалил, нуно было заменить виндусовскими, а какми? или здесь что-то другое?
 
похоже ты не совсем внимательно почитал литературу, которую тебе указали ;)))
в винде нужно сначала сделать:
WSAStartup(MAKEWORD(2,0), &wsadata);
а при завершении работы:
WSACleanup();

для кроссплатформенности это дело обычно оборачивается c помощью #ifdef
 
1 #include <sys/types.h> удалил
2 #include <sys/socket.h> изменил на <winsock2.h>
3 #include <netinet/in.h> удалил
4 #include <stdio.h> Оставил
5 int main (void)
6 {
WSAData wsa;
WSAStartup(MAKEWORD(2,2),&wsa);
7 struct sockaddr_in local;
8 int s;
9 int s1;
10 int rc;
11 char buf [ 1 ];
12 local.sin_family = AF_INET;
13 local.sin_port = htons( 7500 ) ;
14 local.sin_addr.s_ addr = htonl ( INADDR_ANY );
15 s = socket ( AF_INET, SOCK_STREAM, 0 );
16 if ( s < 0 )
17 {
18 perror("ошибка вызова socket" );
19 exit ( 1 );
20 }
 
Ок,barberan, noonv,  спасибо - работает - сделал вывод - надо на юникс переходить - там всё удобнее и  больше функций работает))))
 
2I_NONE пример из книжки "эффективное программирование tcp/ip"? ;]
 
^rage^, Да, а что? )))
 
^rage^, Можешь, что-то интересное предложить - не против, только ссылочку поточнее дайте))))
 
глянь сюда.
 
^rage^,
Супер, огромное спасибо - вот это вещь  - будет чем сегодня ночью заняться))))
Так как я недавно этой темой начал заниматься можешь мне помочь понять - что это такое
Цитата
ознательно не включена обработка сигнала SIGCHLD, которая должна препятствовать появлению «зомби» процессов.
Почему СОЗНАТЕЛЬНО и что такое «зомби» процессов.
Ещё раз спасибо - просто отпад, если будут ещё  что-нить интересное кинь сюда если не трудно - спасибо)))) :!: :!: :!:
 
зомби эт в никсах когда процесс уже умер, но выделенные для него ресурсы не освободились и оно висит себе в списке процессов, и жрёт память=\ во сволотчь
 
~S/E/r/G~,  Ок, спасибо, понял. Правдо сволотчи эти зомби)))
 
Цитата
зомби эт в никсах когда процесс уже умер, но выделенные для него ресурсы не освободились
точнее, когда родительский процесс умер раньше чайлда. В таком случае чайлду некому вернуть код своего завершения.
 
Цитата
^rage^ пишет:
точнее, когда родительский процесс умер раньше чайлда. В таком случае чайлду некому вернуть код своего завершения.
Тоже не совсем верно :))
Если родитель именно умер, то чайлд становится зомби, но лишь на очень короткое время, после чего конроль над ним принимает init, который в свою очередь автоматически удаляет унаследованные им дочерние процессы-зомби и высвобождает память.
Зомби же в виде "висящего и жрущего память" можно наблюдать в случае когда процесс к примеру fork-ается, выполняет нужные действия(к примеру берет таймаут), затем вызывает wait(). Если к тому моменту дочерний еще не завершен, wait() заблокирует программу, в противном случае процесс на время становится зомби.
 
apple, ^rage^, ))) Вот теперь я точно понял что это за зомби)))
Спасибо :!:  :!:  :!:
Страницы: 1
Читают тему