URL: https://linuxfr.org/forums/programmation-c--2/posts/getsockname-renvoie-une-structure-vide Title: getsockname renvoie une structure vide ... Authors: str000mff Date: 2007年07月16日T12:06:59+02:00 Tags: Score: 0 Bonjour à tous. Je suis confrontée à une erreur bien bizarre sur hpux itanium (oui, je sais c'est pas linux :) J'ai un serveur qui fait un bind sur une valeur de port 0 (je laisse donc le soin au système de choisir le port pour moi - inutile de me demander pkoi, c'est juste un besoin vital :). Je récupere ensuite le port par un getsockname et je le stoque dans un fichier pour que les clients récuperent le port du serveur. Bon ca marche sous linux, solaris, windob, hpux .... mais pas hpux itanium (_XOPEN_SOURCE_EXTENDED). Voila le code qui me pose pb : #define HERE "get_port_srv" int get_port_srv(SOCKET sock, char *str, int str_length) { £spaces£ £/spaces£struct sockaddr_in address; £spaces£ £/spaces£SOCKLEN length = sizeof(struct sockaddr_in); #if defined _XOPEN_SOURCE_EXTENDED £spaces£ £/spaces£T4((HERE, "_XOPEN_SOURCE_EXTENDED defined => SOCKLEN = socklen_t\n")); #else £spaces£ £/spaces£T4((HERE, "_XOPEN_SOURCE_EXTENDED not defined => SOCKLEN = int\n")); #endif £spaces£ £/spaces£memset(&address, 0, sizeof(address)); £spaces£ £/spaces£T4((HERE, "[Before getsockname]sock : %d, address : %p, IP = %s, Port = %u \n", sock, &address, inet_ntoa(address.sin_addr), ntohs(address.sin_port))); £spaces£ £/spaces£if (getsockname(sock, (struct sockaddr *)&address, &length) < 0) £spaces£ £/spaces£{ £spaces£ £/spaces£TE((HERE, "Error while getting port of server listen socket....\n")); £spaces£ £/spaces£return -1 ; £spaces£ £/spaces£} £spaces£ £/spaces£T4((HERE, "[After getsockname]sock : %d, address : %p, IP = %s, Port = %u \n", sock, &address, inet_ntoa(address.sin_addr), ntohs(address.sin_port))); £spaces£ £/spaces£if ( ntohs(address.sin_port) <= 0 ) £spaces£ £/spaces£{ £spaces£ £/spaces£APIGC_TE((HERE, "Error while getting server port - bad value (%u)\n", ntohs(address.sin_port))); £spaces£ £/spaces£return -1 ; £spaces£ £/spaces£} £spaces£ £/spaces£WSNPRINTF_S(str, str_length, "%u", ntohs(address.sin_port)); £spaces£ £/spaces£ £spaces£ £/spaces£return 0 ; } #undef HERE voila les traces : + 2007年07月16日 11:57:36 TRACE from init_socket + 2007年07月16日 11:57:36 + 2007年07月16日 11:57:36 socket : 5 + + 2007年07月16日 11:57:36 TRACE from bind_socket + 2007年07月16日 11:57:36 set socket option. + 2007年07月16日 11:57:36 set non blocking socket. + 2007年07月16日 11:57:36 socket bind. + 2007年07月16日 11:57:36 address to bind : IP = 127.0.0.1, Port = 0 + 2007年07月16日 11:57:36 address binded : IP = 127.0.0.1, Port = 0 + + 2007年07月16日 11:57:36 TRACE from build_socket_srv + 2007年07月16日 11:57:36 LISTEN - socket 5. -- 2007年07月16日 11:57:36 - ERROR from get_port_srv £spaces£ £/spaces2007ドル/07/16 11:57:36 Error while getting GC port - bad value (0) + + 2007年07月16日 11:57:36 TRACE from listen_socket + 2007年07月16日 11:57:36 Putting the socket in listening mode + + 2007年07月16日 11:57:36 TRACE from get_port_srv + 2007年07月16日 11:57:36 _XOPEN_SOURCE_EXTENDED defined => SOCKLEN = socklen_t + 2007年07月16日 11:57:36 [Before getsockname]sock : 5, address : 9fffffffffffd790, IP = 0.0.0.0, Port = 0 + 2007年07月16日 11:57:36 [After getsockname]sock : 5, address : 9fffffffffffd790, IP = 0.0.0.0, Port = 0 + voici les options de compil : -DHPUX_UNIX -DUNIX -g -D_LARGEFILE64_SOURCE +z -DEXTENDED_SUBMISSION_OPTION -DLOG_METADATA_OPTION -DPROCESS_HANDLE_ABSTRACTION_OPTION -D_XOPEN_SOURCE_EXTENDED -DUSE_TSD_PF_LOCAL -DXSR_OPTION voila les options de link : -L /usr/lib/hpux64 -lxnet si qqun a une idee, ca serait bien chouette parceque la je seche complétement ... ++