1. ホーム
  2. c++

[解決済み] C++ on z/OSでCソケットAPIを使用する方法

2022-04-22 13:09:07

質問

CソケットAPIをz/OS上のC++で正しく動作させるのに、問題があります。

をインクルードしていますが sys/socket.h というコンパイルエラーが発生します。 AF_INET が定義されていない。

それとも、z/OSであることが私の問題をより複雑にしているという事実と関係があるのでしょうか?

があることを発見しました。 #ifdef を打っていることです。どうやらz/OSは、私がどのquot;type"のソケットを使用しているのかを定義しないと気が済まないようです。

#define _OE_SOCKETS

さて、私個人としては、この _OE_SOCKETS もし、z/OSソケットのプログラマーがいたら(3人とも)、これがどのように機能するのか、概要を教えていただけませんか?

テストアプリ

#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

これは基本的にファイル全体をカプセル化するものですか?それが重要かどうかはわかりません。

解決方法は?

IBMのマニュアルを手元に置いておく。

IBMの出版物は概して非常に優れていますが、その形式に慣れることと、どこで答えを探せばいいのかを知る必要があります。 使いたい機能が"feature test macro"で保護されていることがよくありますよ。

をインストールするよう、親切なシステムプログラマーに依頼する必要があります。 XL C/C++ ランタイム・ライブラリ・リファレンス。マンページ をシステムにインストールしてください。 それから "man connect" とすれば、ソケット connect() API の man ページが表示されます。 そうすると、このように表示されます。

フォーマット

X/オープン

#define _XOPEN_SOURCE_EXTENDED 1
#include <sys/socket.h>

int connect(int socket, const struct sockaddr *address, socklen_t address_len);

バークレーソケット

#define _OE_SOCKETS
#include <sys/types.h>
#include <sys/socket.h>

int connect(int socket, struct sockaddr *address, int address_len);