Портабельные сокеты на С

vook

Собственно, сабж. Существует ли такая библиотека?

shlyumper

В примерах от Unix network programming есть нечто подобное.

vook

Мне надо чтобы и под Windows работало.

tima56

Если тебе нужно что-то не слишком глобальное, то можно и самому написать. Насколько я помню, когда я такое писал, у меня ifdef'ы ограничивали вызовы WSAStartup, WSACleanup и close (который в винде closesocket). Ну еще в select'е есть небольшие различия между системами.

vook

Есть идеи, что такое itoa в этом коде? И как это сделать чтоб работало под Линуксом?

if (needinput==1)
{c=getch; itoa(c,buffer,10);
mvprintw(24,1,"[%s]\n",buffer);
sendmessage(buffer,theClient);
needinput=0;
}

vall

наверно обратное преобразование к atoi =)
можно на sprintf заменить.
или писать на c++ она оттуда вроде.

vook

И еще вопрос, как правильно написать вот эту часть;

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: Ладно, вроде разобрался.

Werdna

Хех, чувак, тебе бы непортабильный код научиться писать. Ты же что такое bind не знаешь... :/
Молодость, молодость, виндузятники сели и сразу пишут в своей студии долбаной кроссплатформенный код. А потом удивляются почему не компилируется.

vook

Я же не виноват, что C такой долбанутый язык. В модуле написанном на Common Lisp все связанное с сокетами занимает одну строчку (причем это портабельно). А сервер написанный на C собран из примеров найденных в Интернете и ужасно глючен и крив Он даже на Windows 98 не работает как надо.

kokoc88

Я же не виноват, что C такой долбанутый язык. В модуле написанном на Common Lisp все связанное с сокетами занимает одну строчку (причем это портабельно). А сервер написанный на C собран из примеров найденных в Интернете и ужасно глючен и крив Он даже на Windows 98 не работает как надо.
Ээээ, батенька, сдаётся мне, что язык Си тут совсем не при чём.

Ivan8209

> Есть идеи, что такое itoa в этом коде?
Посмотреть в исходниках BSD.
> И как это сделать чтоб работало под Линуксом?
Собрать с помощью напильника и материалов, взятых из _операционной_ системы.
---
...Я работаю антинаучным аферистом...

Landstreicher

> Есть идеи что такое itoa в этом коде?
Первый раз вижу человека, который знает Lisp и не знает C. Никогда бы не подумал, что так может быть.

Ivan8209

> Ээээ, батенька, сдаётся мне
Креститься не пробовал?
Если одни и те же BSD sockets работают на всех системах по-разному,
то это проблема языка, на котором они, и сокеты, и системы, написаны.
---
A24: Проявления suxx-а неисчислимы.

Ivan8209

> Первый раз вижу человека, который знает Lisp и не знает C.
> Никогда бы не подумал, что так может быть.
Мур, говорят, тоже сей не знает.
И учился в MIT как раз тогда, когда там преподавал Маккарти.
---
...Я работаю антинаучным аферистом...

Landstreicher

> Если одни и те же BSD sockets работают на всех системах по-разному,
> то это проблема языка, на котором они, и сокеты, и системы, написаны.
Это проблема того, что все по-разному интерпретируют RFC (см. недавний тред про TCP). Точная семантика всех этих сокетов отсутствует. Язык тут совершенно не причем.

Ivan8209

> Ты же что такое bind не знаешь... :/
Думается мне, что и ты не сообразишь, что такое "*+",
хотя это реальная инструкция ассемблера.
---
...Я работаю антинаучным аферистом...

Ivan8209

> Точная семантика всех этих сокетов отсутствует.
> Язык тут совершенно не причем.
Это именно что проблема языка, не выработавшего (за 30 лет!)
устойчивых и удобных идиом для выражения действий,
связанных с передачей по сети и вообще --- с IPC.
---
...Я работаю антинаучным аферистом...

Landstreicher

> Это именно что проблема языка, не выработавшего (за 30 лет!)
> устойчивых и удобных идиом для выражения действий,
> связанных с передачей по сети и вообще --- с IPC.
Причем тут язык?! Я тебе говорю про всякие там slow start, congestion avoidance. Там очень большой простор для толкования RFC. Алгоритмы разные, а не их запись.

Ivan8209

> Я тебе говорю про всякие там slow start, congestion avoidance.
Это уже, по большей части, мелочи.
Или просто --- протечки.
> Там очень большой простор для толкования RFC.
Исходя из смысла слов "R.F.C.", так и должно быть.
---
...Я работаю антинаучным аферистом...

Werdna

Причем тут язык?! Я тебе говорю про всякие там slow start, congestion avoidance. Там очень большой простор для толкования RFC. Алгоритмы разные, а не их запись.

Разговор с упёртыми не имеет смысла. Они не понимают, что различается поведение системных вызовов, а язык к ним не имеет никакого отношения. Просто на своимх Лиспах они привыкли к шаблону, и не понимают всего многобразия того что можно написать на си.
О чём можно говорить, если человек не знает что такое bind? Это значит, что его надо отсылать к классическим книжкам! Ведь слово select для них вообще ничего не будет говорить, я уж молчу о более интересных вещах как epoll/kqueue. Просто они привыкли к верхнему уровню, и не понимают даже процесса установки tcp-соединения, о том что какие системные вызовы творят... :/
Человек берёт какой-то говнокод, компилирует его под 98 виндой, небось в визуалстудию добавил "в проект" файлы и хочет чтобы у него все заработало сразу. Подрастёт, поумнеет...

vook

>Просто на своимх Лиспах они привыкли к шаблону, и не понимают всего многобразия того что можно написать на си.
Жжошь кросавчег

Ivan8209

> О чём можно говорить, если человек не знает что такое bind?
Например, о case-lambda.
> Это значит, что его надо отсылать к классическим книжкам!
> Ведь слово select для них вообще ничего не будет говорить,
> я уж молчу о более интересных вещах как epoll/kqueue.
Что делает инструкция "*+"?
Как? Для тебя это ничего не значит?
Посоветовать статью?
> Просто они привыкли к верхнему уровню, и не понимают
> даже процесса установки tcp-соединения, о том что какие
> системные вызовы творят... :/
Да потому что и этот говнопротокол, и твоё копролитное ядро
в таких тонкостях нужны только в исключительных случаях,
а в остальном, они нужны только настоящим пацанам.
Тем, которые закатывают солнце исключительно вручную.
---
A24: Проявления suxx-а неисчислимы.

Werdna

Что делает инструкция "*+"?

ты о плюсах? самое разное, например разыменовать "следующий" итератор. Хотя наопределить можно всё что захочешь.
Да потому что и этот говнопротокол, и твоё копролитное ядро
в таких тонкостях нужны только в исключительных случаях,
а в остальном, они нужны только настоящим пацанам.

так на то си и нужен, чтобы писать быстрые приложения не самого тривиального типа. Простенький httpd уже написан 200 раз, да.
Тем, которые закатывают солнце исключительно вручную.

и что? Твой стёб — глуп.

Ivan8209

>> Что делает инструкция "*+"?
> ты о плюсах?
Ты читать не умеешь?
Об ассемблере, дорогой, об ассемблере.
>> Да потому что и этот говнопротокол, и твоё копролитное ядро
>> в таких тонкостях нужны только в исключительных случаях,
>> а в остальном, они нужны только настоящим пацанам.
> так на то си и нужен, чтобы писать быстрые приложения не самого тривиального типа.
И как быстро ты накатаешь 30 мегабайт осмысленного кода?
Си нахрен не нужен даже для этого.
>> Тем, которые закатывают солнце исключительно вручную.
> и что? я например работаю в основном с теми,
> кто уже что-то написал для веба на перле/пхп
> и переписываю узкие места.
На си?
Нет предела человеческой глупости.
Ты сразу на ассемблер не пробовал переписывать?
Всего лишь впятеро длиннее, зато и заметно быстрее.
> Скажу по секрету — переписывать иногда очень много надо.
Разумеется, много.
Если для перла нет оптимизирующего транслятора,
это ещё не означает, что им должен быть человек.
---
Пользователи делятся на две группы:
тех, кто хочет работать на компьютере,
и тех, кто хочет, чтобы компьютер работал за них.

ava3443

Если для перла нет оптимизирующего транслятора,
это ещё не означает, что им должен быть человек.
теоретик

Werdna

Ты читать не умеешь?
Об ассемблере, дорогой, об ассемблере.

не читал, ты в последнем посте (на который я отвечал) не говорил. Так вот, я не пишу на ассемблере, и уж не знаю о каком трансляторе ты говоришь.
И как быстро ты накатаешь 30 мегабайт осмысленного кода?
Си нахрен не нужен даже для этого.

я накатываю только водку.
> и что? я например работаю в основном с теми,
> кто уже что-то написал для веба на перле/пхп
> и переписываю узкие места.
На си?
Нет предела человеческой глупости.

Ну просто ты в вебе плохо разбираешься, в технологиях ещё ребёнок, писал свой хоумпейдж и всё.
Если для перла нет оптимизирующего транслятора,
это ещё не означает, что им должен быть человек.

Ты пока ещё не понимаешь о чём речь, для тебя язык — это только язык, это не технология. Ты смутно даже наверное представляешь как можно запустить перловый скрипт, хотя бы под Апачем.
В общем, я бы с тобой поспорил, но не охота. Не вижу смысла.

Ivan8209

Не, ну, раз на это пошло, можно набрать подешёвке десяток пианистов.
---
...Я работаю антинаучным аферистом...

Ivan8209

>> Ты читать не умеешь?
>> Об ассемблере, дорогой, об ассемблере.
> не читал, ты в последнем посте (на который я отвечал) не говорил.
Ты читаешь только последнее сообщение?
> Так вот, я не пишу на ассемблере, и уж не знаю о каком трансляторе ты говоришь.
Ну так что, возвращаясь к bind, тебе дать статьи про ассемблер?
>>> и что? я например работаю в основном с теми,
>>> кто уже что-то написал для веба на перле/пхп
>>> и переписываю узкие места.
>> На си?
>> Нет предела человеческой глупости.
> Ну просто ты в вебе плохо разбираешься, в технологиях ещё ребёнок,
> писал свой хоумпейдж и всё. Мне же не зря люди деньги платят, а потом ещё заказывают...
Я не писал "свой хоумпейдж," мне это нафиг не надо.
Я и занимался, и занимаюсь совсем другими вещами.
>>> Если для перла нет оптимизирующего транслятора,
>>> это ещё не означает, что им должен быть человек.
> Ты пока ещё не понимаешь о чём речь, для тебя язык — это только язык, это не технология.
Какие громкие слова!
Но не кружится голова.
Ты готов пойти вслед за каждым визуальщиком и сантехником,
у них тоже: каждая новая фишка --- сразу технология.
> Ты смутно даже наверное представляешь как можно
> запустить перловый скрипт, хотя бы под Апачем.
Ну надо же?
Скрипты работают здесь и сейчас, а я даже и не представляю,
как это я умудрился сделать.
> В общем, я бы с тобой поспорил, но не охота. Не вижу смысла.
---
...Я работаю антинаучным аферистом...

Werdna

Буду по делу только отвечать.
Скрипты работают здесь и сейчас, а я даже и не представляю,
как это я умудрился сделать.

какие? нагрузка какая? логика какая?
разговор имеет смысл ТОЛЬКО если твои скрипты способны отдавать порядка 2 миллионов страниц в сутки.

Ivan8209

> Буду по делу только отвечать.
По делу, говоришь?
Тогда почему ты отвечаешь на то, что возникло из твоих
ничем не обоснованных предположений о моей якобы
неспособности настроить Apache?
А вот на другое, _более_относящееся_к_делу_, не отвечаешь:
p> Так вот, я не пишу на ассемблере, и уж не знаю о каком трансляторе ты говоришь.
K> Ну так что, возвращаясь к bind, тебе дать статьи про ассемблер?
Если ты такой забывчивый, то напоминаю, что мы обсуждаем сокеты,
а не мои умения настраивать Apache или рисовать "хоумпейдж."
Причём не просто сокеты, как это сделано в *BSD,
а переносимый и, что немаловажно, простой
способ работать поверх TCP в рамках сей.
---
...Я работаю антинаучным аферистом...

Werdna

Я ещё раз повторюсь, что я свёл речь к httpd как частным случаям tcp-сервера.
Могу дать исходники своего httpd, он работает под FreeBSD, Linux и под другой _любой_ POSIX-совместимой операционкой. Под винду не проверял — нету у меня винды, но думаю поставить несколько условий и будет работать. Почему я выделил FreeBSD и Linux? Потому что на них я использую отдельные механизмы, а не стандартный select для повышения производительности. Только и всего.
Если ты посмотришь мой код, то увидишь, что там есть несколько define'ов, и не так уж их много. :/

sergey_m

разговор имеет смысл ТОЛЬКО если твои скрипты способны отдавать порядка 2 миллионов страниц в сутки.
У меня на работе все люди близкие к вебу, то есть которые пишут то, что генерит html всё меряют в единицах в сутки. А те, кто ближе к http-серверу, к ОС, к роутерам и свитчам всё меряют в единицах в секунду.

Werdna

У меня на работе все люди близкие к вебу, то есть которые пишут то, что генерит html всё меряют в единицах в сутки. А те, кто ближе к http-серверу, к ОС, к роутерам и свитчам всё меряют в единицах в секунду.

Это понятно почему — разная нагрузка в дневные и ночные часы. Проблема в том, что я не смог измерить производительность своего httpd в секунду — свою утилиту было лень писать, а ab апачевский не умеет так быстро дёргать.
И ещё: всё-таки ответы тоже разные бывают. И я больше склонен смотреть на производительность сервера когда что-то не работает, и скрипты начинаются таёмаутииться. У нас такая ситуация была, тогда Апач 200 чайлдов рожал, а потом всё падало. Вот с такими ситуациями гораздо интереснее разбираться, а не с тупым количеством тестовых ответов в секунду.

sergey_m

Дело в том, что "2 млн в сутки" мне ни о чём не говорит. Я не представляю много это или мало.

Ivan8209

p> он работает под FreeBSD, Linux и под другой _любой_ POSIX-совместимой операционкой.
p> Они не понимают, что различается поведение системных вызовов,
p> а язык к ним не имеет никакого отношения.
Расскажешь, где в POSIX описаны системные вызовы?
(Между прочим, они довольно сильно отличаются у BSD и Linux,
только ты этого не видишь, потому что не знаешь, что такое "*+".)
Ты не видишь разницы потому, что:
а) и BSD, и GNU являются *NIX;
б) как следствие, и там, и там используются библиотеки GNU
либо библиотеки с одним (одинаковым или очень похожим)
интерфейсом;
в) и там, и там используется один и тот же компилятор от GNU.
Написать интерпретатор си несравнимо сложнее, чем лиспа,
поэтому си как язык значительно более однообразен и,
вследствие отсутствия экспериментальных наработок,
более беден.
В частности, так и не придумали достаточно простых идиом
установления сетевых соединений.
> Под винду не проверял — нету у меня винды,
> но думаю поставить несколько условий и будет работать.
"Несколько условий" --- это чтобы была библиотека, как под унихами?
Это условие записано в цели, там написано: "Портабельные сокеты на С,"---
так что такие твои "условия" не по делу.
---
...Я работаю антинаучным аферистом...
Оставить комментарий
Имя или ник:
Комментарий: