У меня возникают вопросы , получить С Sockets API для работы должным образом C++
на z/OS
.
Хотя я включаю sys/socket.h
, я все еще получаю ошибки времени компиляции, говорящие мне, что AF_INET
это не определено .
Я упускаю что-то очевидное или это связано с тем, что z/OS
мои проблемы намного усложняют мои проблемы?
Обновление : После дальнейшего расследования я обнаружил, что есть, #ifdef
что я бью. Очевидно, z/OS
это не радует, если я не укажу, какой «тип» сокетов я использую:
#define _OE_SOCKETS
Теперь я лично понятия не имею, для чего это _OE_SOCKETS
на самом деле, так что если есть z/OS
программисты для сокетов (все трое из вас), возможно, вы могли бы дать мне краткое изложение того, как все это работает?
Тестовое приложение
#include <sys/socket.h>
int main()
{
return AF_INET;
}
Выход компиляции / ссылки:
cxx -Wc,xplink -Wl,xplink -o inet_test inet.C
"./inet.C", line 5.16: CCN5274 (S) The name lookup for "AF_INET" did not find a declaration.
CCN0797(I) Compilation failed for file ./inet.C. Object file not created.
Проверка sys / sockets.h включает в себя определение, которое мне нужно, и, насколько я могу судить, оно не блокируется какими-либо #ifdef
утверждениями.
Однако я заметил, что он содержит следующее:
#ifdef __cplusplus
extern "C" {
#endif
который инкапсулирует в основном весь файл? Не уверен, если это имеет значение.
Поэтому постарайтесь
прежде чем включить sys / socket.h
источник
Возможно, вы захотите взглянуть на cpp-sockets , оболочку C ++ для системных вызовов сокетов. Работает со многими операционными системами (Win32, POSIX, Linux, * BSD). Я не думаю, что он будет работать с z / OS, но вы можете взглянуть на включаемые файлы, которые он использует, и у вас будет много примеров проверенного кода, который хорошо работает на других ОС.
источник
@Jax:
extern "C"
вещь имеет значение, очень очень. Если заголовочный файл не имеет его, тогда (если это не заголовочный файл только для C ++), вам придется заключить#include
его в него:По сути, в любое время, когда программа на C ++ хочет подключиться к средствам на основе C,
extern "C"
это жизненно важно. На практике это означает, что имена, используемые во внешних ссылках, не будут искажены, как обычные имена C ++. Ссылка.источник
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не программист C ++, однако я очень хорошо знаю C. Я адаптировал эти вызовы из некоторого кода C, который у меня есть.
Также уценка поставить эти странные _ как мои подчеркивания.
Вы должны просто иметь возможность написать абстракционный класс вокруг сокетов C примерно так:
Затем есть методы для открытия, закрытия и отправки пакетов по сокету.
Например, открытый вызов может выглядеть примерно так:
источник
Используйте следующий флаг c89:
Пример:
Для получения дополнительной информации см. Параметры c89 в Руководстве пользователя z / OS XLC / C ++.
источник