Программирование сокетов USS C++ и _OE_SOCKETS
В настоящее время я портирую приложение на MVS с использованием интерфейса USS. Я сталкиваюсь с проблемой компиляции (с использованием компилятора C++) следующей программы:
#define _XOPEN_SOURCE_EXTENDED 1
#define _OE_SOCKETS
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main() {
struct in_addr add;
int sd = socket(AF_INET, SOCK_STREAM, 0);
inet_ntoa(add);
return 0;
}
IBM Docs заявляет, что тот, кто хочет использовать функции сокетов, должен определить _OE_SOCKETS
(а также _XOPEN_SOURCE_EXTENDED
если это C++). Но у меня есть неопределенный сокет символа:
$> c++ test.cpp
"./test.cpp", line 10.12: CCN5274 (S) The name lookup for "socket" did not find a declaration.
CCN0793(I) Compilation failed for file ./test.cpp. Object file not created.
FSUM3065 The COMPILE step ended with return code 12.
FSUM3017 Could not compile test.cpp. Correct the errors and try again.
Небольшое расследование заставляет меня думать, что у меня есть поврежденный заголовочный файл sys / socket.h, на самом деле вот выдержка из этого файла:
690: #ifndef _OE_SOCKETS /* must be __UU */
...
732: int socket (int, int, int);
...
780: #endif /* ifndef _OE_SOCKETS */
Я чувствую себя как #ifndef _OE_SOCKETS
должен быть #ifdef _OE_SOCKETS
,
Кто-нибудь может подтвердить это мне? Благодарю.
Последнее, uname дает на коробке, которую я использую:
$> uname -a
OS/390 S0W1 20.00 03 2094
1 ответ
Я снова, на всякий случай, это было бы полезно для кого-то еще.
Я неправильно понял документ. Если вы используете компилятор C, определите _OE_SOCKETS
но если вы используете компилятор C++, тогда определите _XOPEN_SOURCE_EXTENDED
но не оба!