Портабельные сокеты на С
Unix network programming есть нечто подобное.
В примерах от
Мне надо чтобы и под Windows работало.
Если тебе нужно что-то не слишком глобальное, то можно и самому написать. Насколько я помню, когда я такое писал, у меня ifdef'ы ограничивали вызовы WSAStartup, WSACleanup и close (который в винде closesocket). Ну еще в select'е есть небольшие различия между системами.
if (needinput==1)
{c=getch; itoa(c,buffer,10);
mvprintw(24,1,"[%s]\n",buffer);
sendmessage(buffer,theClient);
needinput=0;
}
можно на sprintf заменить.
или писать на c++ она оттуда вроде.
struct sockaddr_in sa;
sa.sin_family=AF_INET;
sa.sin_port=PORTNUM;
sa.sin_addr=INADDR_LOOPBACK;
bind(sock,sa,sizeof(sa;
Я как-то не очень понимаю как этот bind работает...
EDIT: Ладно, вроде разобрался.
Молодость, молодость, виндузятники сели и сразу пишут в своей студии долбаной кроссплатформенный код. А потом удивляются почему не компилируется.
![](/images/graemlins/crazy.gif)
![](/images/graemlins/smile.gif)
Я же не виноват, что C такой долбанутый язык. В модуле написанном на Common Lisp все связанное с сокетами занимает одну строчку (причем это портабельно). А сервер написанный на C собран из примеров найденных в Интернете и ужасно глючен и крив Он даже на Windows 98 не работает как надо.Ээээ, батенька, сдаётся мне, что язык Си тут совсем не при чём.
Посмотреть в исходниках BSD.
> И как это сделать чтоб работало под Линуксом?
Собрать с помощью напильника и материалов, взятых из _операционной_ системы.
---
...Я работаю антинаучным аферистом...
Первый раз вижу человека, который знает Lisp и не знает C. Никогда бы не подумал, что так может быть.
Креститься не пробовал?
Если одни и те же BSD sockets работают на всех системах по-разному,
то это проблема языка, на котором они, и сокеты, и системы, написаны.
---
A24: Проявления suxx-а неисчислимы.
> Никогда бы не подумал, что так может быть.
Мур, говорят, тоже сей не знает.
И учился в MIT как раз тогда, когда там преподавал Маккарти.
---
...Я работаю антинаучным аферистом...
> то это проблема языка, на котором они, и сокеты, и системы, написаны.
Это проблема того, что все по-разному интерпретируют RFC (см. недавний тред про TCP). Точная семантика всех этих сокетов отсутствует. Язык тут совершенно не причем.
Думается мне, что и ты не сообразишь, что такое "*+",
хотя это реальная инструкция ассемблера.
---
...Я работаю антинаучным аферистом...
> Язык тут совершенно не причем.
Это именно что проблема языка, не выработавшего (за 30 лет!)
устойчивых и удобных идиом для выражения действий,
связанных с передачей по сети и вообще --- с IPC.
---
...Я работаю антинаучным аферистом...
> устойчивых и удобных идиом для выражения действий,
> связанных с передачей по сети и вообще --- с IPC.
Причем тут язык?! Я тебе говорю про всякие там slow start, congestion avoidance. Там очень большой простор для толкования RFC. Алгоритмы разные, а не их запись.
Это уже, по большей части, мелочи.
Или просто --- протечки.
> Там очень большой простор для толкования RFC.
Исходя из смысла слов "R.F.C.", так и должно быть.
---
...Я работаю антинаучным аферистом...
Причем тут язык?! Я тебе говорю про всякие там slow start, congestion avoidance. Там очень большой простор для толкования RFC. Алгоритмы разные, а не их запись.
Разговор с упёртыми не имеет смысла. Они не понимают, что различается поведение системных вызовов, а язык к ним не имеет никакого отношения. Просто на своимх Лиспах они привыкли к шаблону, и не понимают всего многобразия того что можно написать на си.
О чём можно говорить, если человек не знает что такое bind? Это значит, что его надо отсылать к классическим книжкам! Ведь слово select для них вообще ничего не будет говорить, я уж молчу о более интересных вещах как epoll/kqueue. Просто они привыкли к верхнему уровню, и не понимают даже процесса установки tcp-соединения, о том что какие системные вызовы творят... :/
Человек берёт какой-то говнокод, компилирует его под 98 виндой, небось в визуалстудию добавил "в проект" файлы и хочет чтобы у него все заработало сразу. Подрастёт, поумнеет...
Жжошь кросавчег
![](/images/graemlins/grin.gif)
Например, о case-lambda.
> Это значит, что его надо отсылать к классическим книжкам!
> Ведь слово select для них вообще ничего не будет говорить,
> я уж молчу о более интересных вещах как epoll/kqueue.
Что делает инструкция "*+"?
Как? Для тебя это ничего не значит?
Посоветовать статью?
> Просто они привыкли к верхнему уровню, и не понимают
> даже процесса установки tcp-соединения, о том что какие
> системные вызовы творят... :/
Да потому что и этот говнопротокол, и твоё копролитное ядро
в таких тонкостях нужны только в исключительных случаях,
а в остальном, они нужны только настоящим пацанам.
Тем, которые закатывают солнце исключительно вручную.
---
A24: Проявления suxx-а неисчислимы.
Что делает инструкция "*+"?
ты о плюсах? самое разное, например разыменовать "следующий" итератор. Хотя наопределить можно всё что захочешь.
Да потому что и этот говнопротокол, и твоё копролитное ядро
в таких тонкостях нужны только в исключительных случаях,
а в остальном, они нужны только настоящим пацанам.
так на то си и нужен, чтобы писать быстрые приложения не самого тривиального типа. Простенький httpd уже написан 200 раз, да.
Тем, которые закатывают солнце исключительно вручную.
и что? Твой стёб — глуп.
> ты о плюсах?
Ты читать не умеешь?
Об ассемблере, дорогой, об ассемблере.
>> Да потому что и этот говнопротокол, и твоё копролитное ядро
>> в таких тонкостях нужны только в исключительных случаях,
>> а в остальном, они нужны только настоящим пацанам.
> так на то си и нужен, чтобы писать быстрые приложения не самого тривиального типа.
И как быстро ты накатаешь 30 мегабайт осмысленного кода?
Си нахрен не нужен даже для этого.
>> Тем, которые закатывают солнце исключительно вручную.
> и что? я например работаю в основном с теми,
> кто уже что-то написал для веба на перле/пхп
> и переписываю узкие места.
На си?
Нет предела человеческой глупости.
Ты сразу на ассемблер не пробовал переписывать?
Всего лишь впятеро длиннее, зато и заметно быстрее.
> Скажу по секрету — переписывать иногда очень много надо.
Разумеется, много.
Если для перла нет оптимизирующего транслятора,
это ещё не означает, что им должен быть человек.
---
Пользователи делятся на две группы:
тех, кто хочет работать на компьютере,
и тех, кто хочет, чтобы компьютер работал за них.
Если для перла нет оптимизирующего транслятора,теоретик
это ещё не означает, что им должен быть человек.
![](/images/graemlins/smile.gif)
Ты читать не умеешь?
Об ассемблере, дорогой, об ассемблере.
не читал, ты в последнем посте (на который я отвечал) не говорил. Так вот, я не пишу на ассемблере, и уж не знаю о каком трансляторе ты говоришь.
И как быстро ты накатаешь 30 мегабайт осмысленного кода?
Си нахрен не нужен даже для этого.
я накатываю только водку.
> и что? я например работаю в основном с теми,
> кто уже что-то написал для веба на перле/пхп
> и переписываю узкие места.
На си?
Нет предела человеческой глупости.
Ну просто ты в вебе плохо разбираешься, в технологиях ещё ребёнок, писал свой хоумпейдж и всё.
Если для перла нет оптимизирующего транслятора,
это ещё не означает, что им должен быть человек.
Ты пока ещё не понимаешь о чём речь, для тебя язык — это только язык, это не технология. Ты смутно даже наверное представляешь как можно запустить перловый скрипт, хотя бы под Апачем.
В общем, я бы с тобой поспорил, но не охота. Не вижу смысла.
---
...Я работаю антинаучным аферистом...
>> Об ассемблере, дорогой, об ассемблере.
> не читал, ты в последнем посте (на который я отвечал) не говорил.
Ты читаешь только последнее сообщение?
> Так вот, я не пишу на ассемблере, и уж не знаю о каком трансляторе ты говоришь.
Ну так что, возвращаясь к bind, тебе дать статьи про ассемблер?
>>> и что? я например работаю в основном с теми,
>>> кто уже что-то написал для веба на перле/пхп
>>> и переписываю узкие места.
>> На си?
>> Нет предела человеческой глупости.
> Ну просто ты в вебе плохо разбираешься, в технологиях ещё ребёнок,
> писал свой хоумпейдж и всё. Мне же не зря люди деньги платят, а потом ещё заказывают...
Я не писал "свой хоумпейдж," мне это нафиг не надо.
Я и занимался, и занимаюсь совсем другими вещами.
>>> Если для перла нет оптимизирующего транслятора,
>>> это ещё не означает, что им должен быть человек.
> Ты пока ещё не понимаешь о чём речь, для тебя язык — это только язык, это не технология.
Какие громкие слова!
Но не кружится голова.
Ты готов пойти вслед за каждым визуальщиком и сантехником,
у них тоже: каждая новая фишка --- сразу технология.
> Ты смутно даже наверное представляешь как можно
> запустить перловый скрипт, хотя бы под Апачем.
Ну надо же?
Скрипты работают здесь и сейчас, а я даже и не представляю,
как это я умудрился сделать.
> В общем, я бы с тобой поспорил, но не охота. Не вижу смысла.
---
...Я работаю антинаучным аферистом...
Скрипты работают здесь и сейчас, а я даже и не представляю,
как это я умудрился сделать.
какие? нагрузка какая? логика какая?
разговор имеет смысл ТОЛЬКО если твои скрипты способны отдавать порядка 2 миллионов страниц в сутки.
По делу, говоришь?
Тогда почему ты отвечаешь на то, что возникло из твоих
ничем не обоснованных предположений о моей якобы
неспособности настроить Apache?
А вот на другое, _более_относящееся_к_делу_, не отвечаешь:
p> Так вот, я не пишу на ассемблере, и уж не знаю о каком трансляторе ты говоришь.
K> Ну так что, возвращаясь к bind, тебе дать статьи про ассемблер?
Если ты такой забывчивый, то напоминаю, что мы обсуждаем сокеты,
а не мои умения настраивать Apache или рисовать "хоумпейдж."
Причём не просто сокеты, как это сделано в *BSD,
а переносимый и, что немаловажно, простой
способ работать поверх TCP в рамках сей.
---
...Я работаю антинаучным аферистом...
Могу дать исходники своего httpd, он работает под FreeBSD, Linux и под другой _любой_ POSIX-совместимой операционкой. Под винду не проверял — нету у меня винды, но думаю поставить несколько условий и будет работать. Почему я выделил FreeBSD и Linux? Потому что на них я использую отдельные механизмы, а не стандартный select для повышения производительности. Только и всего.
Если ты посмотришь мой код, то увидишь, что там есть несколько define'ов, и не так уж их много. :/
разговор имеет смысл ТОЛЬКО если твои скрипты способны отдавать порядка 2 миллионов страниц в сутки.У меня на работе все люди близкие к вебу, то есть которые пишут то, что генерит html всё меряют в единицах в сутки. А те, кто ближе к http-серверу, к ОС, к роутерам и свитчам всё меряют в единицах в секунду.
У меня на работе все люди близкие к вебу, то есть которые пишут то, что генерит html всё меряют в единицах в сутки. А те, кто ближе к http-серверу, к ОС, к роутерам и свитчам всё меряют в единицах в секунду.
Это понятно почему — разная нагрузка в дневные и ночные часы. Проблема в том, что я не смог измерить производительность своего httpd в секунду — свою утилиту было лень писать, а ab апачевский не умеет так быстро дёргать.
![](/images/graemlins/smile.gif)
И ещё: всё-таки ответы тоже разные бывают. И я больше склонен смотреть на производительность сервера когда что-то не работает, и скрипты начинаются таёмаутииться. У нас такая ситуация была, тогда Апач 200 чайлдов рожал, а потом всё падало. Вот с такими ситуациями гораздо интереснее разбираться, а не с тупым количеством тестовых ответов в секунду.
Дело в том, что "2 млн в сутки" мне ни о чём не говорит. Я не представляю много это или мало.
p> Они не понимают, что различается поведение системных вызовов,
p> а язык к ним не имеет никакого отношения.
Расскажешь, где в POSIX описаны системные вызовы?
(Между прочим, они довольно сильно отличаются у BSD и Linux,
только ты этого не видишь, потому что не знаешь, что такое "*+".)
Ты не видишь разницы потому, что:
а) и BSD, и GNU являются *NIX;
б) как следствие, и там, и там используются библиотеки GNU
либо библиотеки с одним (одинаковым или очень похожим)
интерфейсом;
в) и там, и там используется один и тот же компилятор от GNU.
Написать интерпретатор си несравнимо сложнее, чем лиспа,
поэтому си как язык значительно более однообразен и,
вследствие отсутствия экспериментальных наработок,
более беден.
В частности, так и не придумали достаточно простых идиом
установления сетевых соединений.
> Под винду не проверял — нету у меня винды,
> но думаю поставить несколько условий и будет работать.
"Несколько условий" --- это чтобы была библиотека, как под унихами?
Это условие записано в цели, там написано: "Портабельные сокеты на С,"---
так что такие твои "условия" не по делу.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
vook
Собственно, сабж. Существует ли такая библиотека?