173 votes

Comment utiliser l'API de socket C en C ++ sur z / OS

J'ai eu des problèmes à obtenir le C API sockets pour fonctionner correctement en C++. En particulier, même si je suis notamment sys/socket.h, je reçois toujours le temps de compilation d'erreurs me disant que AF_INET n'est pas défini. Ai-je raté quelque chose d'évident, ou cela pourrait-il être lié au fait que je fais ce codage sur z/OS et mes problèmes sont beaucoup plus complexes? ;)


Oh chers. Après enquête, j'ai découvert qu'il y a un #ifdef que je suis frapper. Apparemment z/OS n'est pas heureux à moins que je définir le type de sockets, je suis en utilisant avec un peu de

#define _OE_SOCKETS

d'action. Maintenant, personnellement, je n'ai aucune idée de ce que cela OE SOCKETS thingy est, et si un système z/OS sockets programmeurs sont là (tous les 3 d'entre vous), peut-être que vous pourriez me donner un aperçu de la façon dont tout cela fonctionne?

94voto

Anthony Giorgio Points 824

Conserver une copie des manuels de IBM à portée de main:

IBM publications sont généralement très bonnes, mais vous avez besoin de s'habituer à leur format, ainsi que de savoir où chercher une réponse. Vous trouverez assez souvent qu'une fonctionnalité que vous souhaitez utiliser est gardée par un "macros de test de fonctionnalité"

Vous devriez demander à votre environnement de programmeur système pour installer le XL C/C++ de la Bibliothèque d'Exécution de Référence: Pages de manuel sur votre système. Ensuite, vous pouvez faire des choses comme "l'homme se connecter" pour tirer la page de man pour le socket connect() de l'API. Quand je fais ça, c'est ce que je vois:

FORMAT

X/Open

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

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

Les Sockets Berkeley

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

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

44voto

Chris Jester-Young Points 102876

Je n'ai eu aucun problème à utiliser l'API de sockets BSD en C ++, sous GNU / Linux. Voici l'exemple de programme que j'ai utilisé:

 #include <sys/socket.h> 

Donc, mon point de vue est que z / OS est probablement le facteur de complication ici, cependant, parce que je n'ai jamais utilisé z / OS auparavant, encore moins programmé dans celui-ci, je ne peux pas le dire définitivement. :-P

38voto

Robert Groves Points 3867

Voir l' Aide de z/OS UNIX System Services de sockets dans la section de z/OS XL C/C++ Programming Guide. Assurez-vous que vous êtes ainsi que les fichiers d'en-tête et à l'aide de la #définit.

Le lien vers le doc a changé au fil des ans, mais vous devriez être en mesure d'obtenir assez facilement par trouver l'emplacement actuel du Soutien Et de la section Téléchargements sur ibm.com et la recherche de la documentation par le titre.

31voto

Fabio Ceconello Points 8662

Le _OE_SOCKETS semble être simplement d'activer/de désactiver la définition de la prise de symboles liés. Il n'est pas rare, dans certaines bibliothèques, d'un groupe de macros pour le faire, pour s'assurer que vous n'êtes pas à la compilation/en reliant les parties ne sont pas nécessaires. La macro n'est pas la norme dans d'autres sockets implémentations, il semble être quelque chose de spécifique pour z/OS.

Jetez un oeil à cette page:
La compilation et la Liaison de z/VM C les Sockets Programme

23voto

Jax Points 1877

Sûr que je peux publier une application de test.

#include <sys/socket.h>

Compiler/Lien De Sortie:

cxx -Wc,xplink -Wl,xplink -o inet_test inet.C

"./inet.C", ligne 5.16: CCN5274 (S) de La recherche de nom pour "AF_INET" n'a pas trouvé une déclaration.

CCN0797(I) la Compilation a échoué pour le fichier ./inet.C. Objet fichier n'est pas créé.

Un chèque de sys/sockets.h ne comprennent la définition que j'ai besoin, et aussi loin que je peux dire, c'est de ne pas être bloqué par un #ifdef consolidés.

J'ai cependant remarqué qu'il contient les éléments suivants:


qui englobe essentiellement l'ensemble du fichier. Vous ne savez pas si c'est important.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X