Программирование сокетов USS C ++ и _OE_SOCKETS - PullRequest
1 голос
/ 23 октября 2009

В настоящее время я портирую приложение на 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 Ответ

1 голос
/ 23 октября 2009

Я снова, на всякий случай, это будет полезно кому-то еще.

Я неправильно понял документ. Если вы используете компилятор C, определите _OE_SOCKETS, но если вы используете компилятор C ++, тогда определите _XOPEN_SOURCE_EXTENDED, но не оба!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...