2009-10-23 10 views
1

Je suis actuellement en train de porter une application sur MVS en utilisant l'interface USS. Je suis confronté à un problème compilation (en utilisant compilateur C++) le programme suivant:Programmation socket USS C++ et _OE_SOCKETS

#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 indique que celui qui veut utiliser les fonctions de prises doit définir _OE_SOCKETS (et _XOPEN_SOURCE_EXTENDED si elle est C++). Mais j'ai prise symbole non défini:

$> 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. 

Un peu d'enquête me font penser que j'ai un fichier d'en-tête sys/socket.h corrompu, est en effet ici un extrait de ce fichier:

690:  #ifndef _OE_SOCKETS /* must be __UU */ 
... 
732:   int  socket  (int, int, int); 
... 
780:  #endif /* ifndef _OE_SOCKETS */ 

Je me sens comme le #ifndef _OE_SOCKETS devrait être un #ifdef _OE_SOCKETS.

Quelqu'un peut-il me confirmer cela? Merci.

dernier, uname donne sur la boîte que je utilise: Me again

$> uname -a 
OS/390 S0W1 20.00 03 2094 

Répondre

1

, juste au cas où ce serait utile à quelqu'un d'autre.

J'ai mal interprété le document. Si votre compilateur C utilise _OE_SOCKETS, mais si vous utilisez un compilateur C++, définissez _XOPEN_SOURCE_EXTENDED mais pas les deux!