USS C ++套接字编程和_OE_SOCKETS

时间:2009-10-23 12:38:29

标签: c++ sockets uss

我目前正在使用USS界面在MVS上移植应用程序。我正面临一个问题(使用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(如果它是C ++,则定义_XOPEN_SOURCE_EXTENDED)。但我有未定义的符号套接字:

$> 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 个答案:

答案 0 :(得分:1)

我再次,以防这对其他人有用。

我误解了文档。如果您使用C编译器定义_OE_SOCKETS但是如果您使用C ++编译器然后定义_XOPEN_SOURCE_EXTENDED但不是两者都定义!