Saya mengalami masalah mendapatkan C soket API untuk bekerja dengan baik di C++
atas z/OS
.
Meskipun saya termasuk sys/socket.h
, saya masih mendapatkan kesalahan waktu kompilasi yang mengatakan kepada saya bahwa AF_INET
tidak didefinisikan .
Apakah saya kehilangan sesuatu yang sudah jelas, atau apakah ini terkait dengan fakta bahwa dengan z/OS
menjadikan masalah saya jauh lebih rumit?
Pembaruan : Setelah diselidiki lebih lanjut, saya menemukan bahwa ada sesuatu #ifdef
yang saya pukul. Tampaknya z/OS
tidak senang kecuali saya menentukan "jenis" soket yang saya gunakan dengan:
#define _OE_SOCKETS
Sekarang, saya pribadi tidak tahu untuk apa ini _OE_SOCKETS
sebenarnya, jadi jika ada z/OS
programmer soket di luar sana (kalian bertiga), mungkin Anda bisa memberi saya gambaran tentang bagaimana ini semua bekerja?
Aplikasi Uji
#include <sys/socket.h>
int main()
{
return AF_INET;
}
Kompilasi / Tautan Keluaran:
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.
Pemeriksaan sys / sockets.h tidak termasuk definisi yang saya butuhkan, dan sejauh yang saya tahu, itu tidak diblokir oleh #ifdef
pernyataan apa pun .
Namun saya perhatikan itu mengandung yang berikut:
#ifdef __cplusplus
extern "C" {
#endif
yang pada dasarnya merangkum seluruh file? Tidak yakin apakah itu penting.
Jadi coba
sebelum Anda memasukkan sys / socket.h
sumber
Anda mungkin ingin melihat ke soket cpp , pembungkus C ++ untuk panggilan sistem soket. Ia bekerja dengan banyak sistem operasi (Win32, POSIX, Linux, * BSD). Saya tidak berpikir itu akan bekerja dengan z / OS tetapi Anda dapat melihat pada file sertakan yang digunakannya dan Anda akan memiliki banyak contoh kode yang diuji yang bekerja dengan baik pada OS lain.
sumber
@ Jet:
extern "C"
Masalahnya sangat, sangat banyak. Jika file header tidak memilikinya, (kecuali file header C ++ - only), Anda harus menyertakannya#include
:Pada dasarnya, kapan pun di mana program C ++ ingin menautkan ke fasilitas berbasis C, hal
extern "C"
itu sangat penting. Dalam istilah praktis, ini berarti bahwa nama yang digunakan dalam referensi eksternal tidak akan hancur, seperti nama C ++ normal. Referensi.sumber
PENOLAKAN: Saya bukan seorang programmer C ++, namun saya tahu C dengan sangat baik. Saya menyesuaikan panggilan ini dari beberapa kode C yang saya miliki.
Penurunan harga juga menempatkan _ aneh ini sebagai garis bawah saya.
Anda seharusnya bisa menulis kelas abstraksi di sekitar soket C dengan sesuatu seperti ini:
Kemudian punya metode untuk membuka, menutup, dan mengirim paket ke soket.
Misalnya, panggilan terbuka mungkin terlihat seperti ini:
sumber
Gunakan bendera c89 berikut:
Contoh:
Untuk informasi lebih lanjut, cari Opsi c89 di Panduan Pengguna z / OS XLC / C ++.
sumber