// catch_url_init(&port,&return_host); HTSEXT_API T_SOC catch_url_init(int *port, /* 128 bytes */ char *adr) { T_SOC soc = INVALID_SOCKET; char h_loc[256]; if (gethostname(h_loc, sizeof(h_loc)) == 0) { // host name SOCaddr server; if (hts_dns_resolve_nocache(h_loc, &server) != NULL) { // notre host if ((soc = (T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM, 0)) != INVALID_SOCKET) { SOCaddr_initport(server, *port); if (bind(soc, &SOCaddr_sockaddr(server), SOCaddr_size(server)) == 0) { SOCaddr server2; SOClen len = SOCaddr_capacity(server2); if (getsockname(soc, &SOCaddr_sockaddr(server2), &len) == 0) { *port = ntohs(SOCaddr_sinport(server)); // récupérer port if (listen(soc, 1) >= 0) { SOCaddr_inetntoa(adr, 128, server2); } else { #ifdef _WIN32 closesocket(soc); #else close(soc); #endif soc = INVALID_SOCKET; } } else { #ifdef _WIN32 closesocket(soc); #else close(soc); #endif soc = INVALID_SOCKET; } } else { #ifdef _WIN32 closesocket(soc); #else close(soc); #endif soc = INVALID_SOCKET; } } } } return soc; }
// catch_url_init(&port,&return_host); HTSEXT_API T_SOC catch_url_init(int* port,char* adr) { T_SOC soc = INVALID_SOCKET; char h_loc[256+2]; if (gethostname(h_loc,256)==0) { // host name SOCaddr server; int server_size=sizeof(server); t_hostent* hp_loc; t_fullhostent buffer; // effacer structure memset(&server, 0, sizeof(server)); if ( (hp_loc=vxgethostbyname(h_loc, &buffer)) ) { // notre host // copie adresse SOCaddr_copyaddr(server, server_size, hp_loc->h_addr_list[0], hp_loc->h_length); if ( (soc = (T_SOC) socket(SOCaddr_sinfamily(server), SOCK_STREAM, 0)) != INVALID_SOCKET) { SOCaddr_initport(server, *port); if ( bind(soc,(struct sockaddr*) &server,server_size) == 0 ) { SOCaddr server2; int len; len=sizeof(server2); // effacer structure memset(&server2, 0, sizeof(server2)); if (getsockname(soc,(struct sockaddr*) &server2,&len) == 0) { *port=ntohs(SOCaddr_sinport(server)); // récupérer port if (listen(soc,10)>=0) { // au pif le 10 SOCaddr_inetntoa(adr, 128, server2, len); } else { #ifdef _WIN32 closesocket(soc); #else close(soc); #endif soc=INVALID_SOCKET; } } else { #ifdef _WIN32 closesocket(soc); #else close(soc); #endif soc=INVALID_SOCKET; } } else { #ifdef _WIN32 closesocket(soc); #else close(soc); #endif soc=INVALID_SOCKET; } } } } return soc; }